[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: +nan.0 contradiction

This page is part of the web mail archives of SRFI 77 from before July 7th, 2015. The new archives for SRFI 77 contain all messages, not just those from before July 7th, 2015.



>  | This SRFI regards +nan.0 as a real number whose value is so
>  | indeterminate that it might represent any real number within the
>  | closed interval [-inf.0,+inf.0].
> 
> That sentence implies that (<= -inf.0 +nan.0 +inf.0).
> 
> But that is not true in IEEE-754 arithmetic as compiled by gcc running
> on an Intel(R) Pentium(R) 4 CPU.

As per IEEE754, all relational operators except != return
false when one or both operands are NaN.  !=  returns true
when one or both operands are NaN.

More directly, IEEE754 says NaN is the result of an *invalid*
operation, when an operation's operands lie outside its
domain.  For example, Dividing 0 by 0 is invalid and creates
a NaN -- a NaN also means Not *any* Number!  The quoted
sentence should simply be removed from the srfi.

One nit: The +NaN.0 syntax is misleading since the signedness
of NaN is *not* defined.  I would much prefer a special
syntax like #NaN (and #SNaN if you want to deal with
signalling NaNs).

Recommended reading: Prof. Kahan's Lecture Notes on the
Status of IEEE 754 for Binary Floating-Point Arithmetic.