好奇心の横断歩道を創る!

自分の思考をラバーダック・デバッグするためのブログ

JuliaのNaNは複数あるみたいって話

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

 

何かしらちゃんとした理屈があって、それを理解していれば、覚えたり確認したりすることではないんだろう。本当は勉強しなきゃいけないんだろうなぁと思いつつ。