Bill Coffman wrote:
> NegNan doesn't exist, except as a fluke of the representation (see link for
> how they are represented).  A -NaN is the same as a NaN.  They both fail
> all
> comparison tests, even NaN == NaN is false (unless your compiler optimizes
> the comparison out).  Only difference is the way they are stringified,
> which
> should be "NaN", but stringification of NaN is non-standard.  Solaris
> compilers will print "-NaN", but gcc only prints "nan".  Microsoft compiler
> prints strange stuff.

I am wondering if this NaN != NaN property could be used for the isnan
and finite tests, like so:

int
Parrot_math_isnan(double x)
{
    return x != x;
}

int
Parrot_math_finite(double x)
{
    return (!Parrot_math_isnan(x - x));
}

That is, if "x != x" it's a NaN.  If x is finite, "x - x" should yield
something close to 0.  Otherwise, "Inf - Inf" or "NaN - NaN", it's NaN.

Is this not portable enough?  Is it better to look at the bits directly?

Ron

Reply via email to