Floating point init/nan

Jonathan M Davis jmdavisProg at gmx.com
Sat Feb 15 00:41:33 PST 2014


On Saturday, February 15, 2014 05:28:05 Adam D. Ruppe wrote:
> On Saturday, 15 February 2014 at 05:18:51 UTC, Adam S wrote:
> > assert(float.init == float.nan);
> 
> nan never equals nan, this is in the floating point spec used by
> D, C and others.

To be more precise, NaN is never equal to _anything_ - not even itself. Any 
comparison with NaN as one of the operands results in false - just like any 
floating point arithmetic with NaN in it results in NaN. The idea is that that 
way the error which introduced NaN in the first place will propagate and 
therefore be found rather than being hidden. Sometimes, this is very useful, 
and sometimes it's a bit annoying, but it's way the IEEE floating point spec 
says that it's supposed to be.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list