NaNであるかの判定

演算の結果として、数値で定義できない値が生じたときにNaNが出力される。
例えば、負の値に対する2乗根は定義されない。 しかし、NaNが生じただけではプログラムは続行する。
何とか、NaNが生じたところでプログラムをストップしたい。
そこで、NaNが生じたかどうかを問い合わせる関数として isnan関数 がある。
しかし、この関数は含まれていないコンパイラもあるので その場合の対処法も示す。

isnan関数によるNaNの判定 (Intel Fortran Compiler (ifort) で使えました)

プログラム例

PROGRAM test_nan
IMPLICIT NONE
real :: x
x = -1.0
x = sqrt(x)
if (isnan(x)) stop 'NaN value'
END PROGRAM test_nan

isnan関数がない場合

isnan関数がなくても変数自身を比較することでNaNかどうかを判定することができる。 具体的には、

if (hoge .NE. hoge)
  WRITE(6,*) "NaN value"
ENDIF

NaNは、何と比較したとしても常に偽である。

最終更新:2010年07月22日 14:38