VSCodeでJuliaファイル(*.jl)をデバッグしていて、ブレークポイントの条件式にx == NaNやx === NaNを使っていたんだけど、NaNになっているはずなのに一向に引っかからなかった。原因を調べてみた結果、NaNが複数種存在するようだとわかったので、今後自分が困らないように、メモしておく。
NaNを吐き出す計算は、
Inf/Inf
Inf*0.0
0.0/0.0
など。
ただ、キーボードで入力したNaNとの関係は、
Inf/Inf == NaN
Inf/Inf === NaN
0*Inf == NaN
0*Inf === NaN
0/0 == NaN
0/0 === NaN
すべてfalse
ちなみに、
Inf/Inf == 0.0/0.0
0.0/0.0 == 0.0*Inf
0.0*Inf == Inf/Inf
はすべてfalseで
Inf/Inf === 0.0/0.0
0.0/0.0 === 0.0*Inf
0.0*Inf === Inf/Inf
はすべてtrue
何かしらちゃんとした理屈があって、それを理解していれば、覚えたり確認したりすることではないんだろう。本当は勉強しなきゃいけないんだろうなぁと思いつつ。