doubleの演算

doubleの演算で、なぜ、 double.NaN != double.NaN なのだろうか。これは、NaNとの演算は全てfalseであるというルールのためである。数学及び整数演算において、A op B は !(A not op B) と同値であるが、doubleではそうでない。 A op B と同値なのは、!(A not op B) && !double.IsNaN(A) && !double.IsNaN(B)である。従って、!(d1 < d2) と同値なのは、d1 >= d2 || double.IsNaN(d1) || double.IsNaN(d2) である。