nanと±infを検出

nanと±infは計算を行った際に発生する一種のエラー表示のようなもので、nanは非数(not a number)、infは無限(infinity)。通常、この表示になってしまったら、これにどんな演算を行っても、結果はもう変わらない。

nanやinfの発生のさせ方は、pythonでは

>>> float("nan")
nan
>>> float("inf")
inf
>>> float("-inf")
-inf

で発生させられます。

nanやinfが出てしまったら、普通は計算を中断したいです。でも、nanはちょっと怪しい。

>>> if float("inf") == float("inf"):
...     print True;
... else:
...     print False;
...
True

>>> if float("nan") == float("nan"):
...     print True;
... else:
...     print False;
...
False

nan == nanはFalseということで、直感的なやり方は通用しないみたいです。
じゃあ、どうすればいいのかなと考えた結果、僕は

>>> if str(float("nan")) == str(float("nan")):
...     print True;
... else:
...     print False;
...
True

str型に直してしまいましたとさ。もちろん、infの場合も同様です。

ただ、もっと頭のいいやり方は、宇宙線実験の覚え書き (大学院生版):PythonでNaNやinfを調べる の

>>> if float("nan") != float("nan"):
...     print True;
... else:
...     print False;
...
True

もちろん、float("nan")の部分は任意の数値でよくて、こっちの方がクールな感じですねw
ただし、これはnanを調べるためだけのものですが・・・。