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を調べるためだけのものですが・・・。