演算の結果として、数値で定義できない値が生じたときにNaNが出力される。
例えば、負の値に対する2乗根は定義されない。
しかし、NaNが生じただけではプログラムは続行する。
何とか、NaNが生じたところでプログラムをストップしたい。
そこで、NaNが生じたかどうかを問い合わせる関数として
isnan関数
がある。
しかし、この関数は含まれていないコンパイラもあるので
その場合の対処法も示す。
PROGRAM test_nan IMPLICIT NONE real :: x x = -1.0 x = sqrt(x) if (isnan(x)) stop 'NaN value' END PROGRAM test_nan
isnan関数がなくても変数自身を比較することでNaNかどうかを判定することができる。 具体的には、
if (hoge .NE. hoge) WRITE(6,*) "NaN value" ENDIF
NaNは、何と比較したとしても常に偽である。