float.nan is not itself ?

Stewart Gordon smjg_1998 at yahoo.com
Tue Feb 14 13:38:44 PST 2012


On 14/02/2012 15:39, Joshua Reusch wrote:
> Hello,
>
> why does this assertion fail:
>
>> assert(float.nan == float.nan);
>
> there is the std.math.isNaN function which works correctly, but why can I not just use the
> comparison ?

A NaN typically denotes some kind of invalid computation.  If the results of two invalid 
computations were considered equal, it would probably cause problems.

Another way to think of it is to consider NaN as an unknown value.  Two unknown values 
cannot be considered to be equal to each other.  OK, so whether they're equal or not is 
actually unknown.  If there were such a thing as bool.nan, equality comparisons in which 
at least one operand is NaN would probably evaluate to it.  Indeed, null in SQL works this 
way.  But in the absence of this in D, the best design has turned out to be to consider 
NaNs unequal.

Stewart.


More information about the Digitalmars-d-learn mailing list