|
|
|
|
|
by dreish
5009 days ago
|
|
This is hardly a JavaScript quirk. In Clojure: hackclj.core=> Double/NaN
NaN
hackclj.core=> (== Double/NaN Double/NaN)
false
hackclj.core=> (= Double/NaN Double/NaN)
false
hackclj.core=> (.equals Double/NaN Double/NaN)
true
hackclj.core=> (identical? Double/NaN Double/NaN)
false
hackclj.core=> (type Double/NaN)
java.lang.Double
hackclj.core=> (number? Double/NaN)
true
In Perl (which doesn't have a concept of a number type distinct from other scalars such as strings, but we can see that it participates in addition differently from non-numeric scalars, which behave like 0): DB<1> $inf = 1e300 * 1e300
DB<2> $nan = $inf - $inf
DB<3> print $nan
nan
DB<4> print ($nan == $nan)
DB<5> print ref($nan)
DB<6> print $nan+1
nan
In Ruby: irb(main):001:0> inf = 1e300*1e300
=> Infinity
irb(main):002:0> nan = inf-inf
=> NaN
irb(main):003:0> nan == nan
=> false
irb(main):004:0> nan.class
=> Float
Python 2.7.3 (much earlier versions got equality wrong, claiming nan == nan): >>> inf = 1e300*1e300
>>> nan = inf-inf
>>> nan
nan
>>> nan == nan
False
>>> type(nan)
<type 'float'>
|
|