Boost logo

Boost Testing :

From: Robert Ramey (ramey_at_[hidden])
Date: 2005-11-17 11:13:09


Troy S. and I have been looking at the question of implementing
serialization
of NaN, +/-Inf for floats, and doubles for portable text or binary archives.

Turns out there's a fly in the ointment.

For determining if a given double contains a "special" value, float.h
contains the following handy function

int _fpclass(
   double x
);

which returns one of the following values:

      _FPCLASS_SNAN Signaling NaN
      _FPCLASS_QNAN Quiet NaN
      _FPCLASS_NINF Negative infinity ( -INF)
      _FPCLASS_NN Negative normalized non-zero
      _FPCLASS_ND Negative denormalized
      _FPCLASS_NZ Negative zero ( - 0)
      _FPCLASS_PZ Positive 0 (+0)
      _FPCLASS_PD Positive denormalized
      _FPCLASS_PN Positive normalized non-zero
      _FPCLASS_PINF Positive infinity (+INF)

So we could write a flag to the archive indicating if its a special value.

So far, so good.

When the archive is read back, we can read the flag and initialize
the variable with the appropriate value.

BUT - I can't find any "official" to initialize a float/double to any of
these
values. They seem to be the result of operations and its certainly
not obvious that all compilers would be on the same page here.

Note that this same problem arises whenever a float/double is written/read
to/from a stream in a way designed to be portable. So it must have come
up before. What's the solution here?

Robert Ramey


Boost-testing list run by mbergal at meta-comm.com