無限大および NaN

単精度の実数値の場合:
倍精度の実数値の場合:

これらの値は、いずれの Fortran 実定数にも対応しません。 これらの値はすべて、ビット・パターンを直接エンコードするか、または、ieee_arithmetic 組み込みモジュールで提供されている ieee_value 関数を使用して生成できます。 ieee_value 関数の使用のほうが、Fortran 2003 標準で許可されていること、および結果がポータブルであるという理由で、優先するプログラミング手法です。 ビット・パターンを直接エンコードする方式では、それぞれ異なる値に対して異なるビット・パターンを使用するために、 マシンでのポータビリティー問題を起こす場合があります。 次の算術演算の結果、シグナル NaN 値を除くすべての値が計算されます。

$ cat fp_values.f
real plus_inf, minus_inf, plus_nanq, minus_nanq, nans
real large

data plus_inf /z'7f800000'/
data minus_inf /z'ff800000'/
data plus_nanq /z'7fc00000'/
data minus_nanq /z'ffc00000'/
data nans /z'7f800001'/

print *, 'Special values:', plus_inf, minus_inf, plus_nanq, minus_nanq, nans

! They can also occur as the result of operations.
large = 10.0 ** 200
print *, 'Number too big for a REAL:', large * large
print *, 'Number divided by zero:', (-large) / 0.0
print *, 'Nonsensical results:', plus_inf - plus_inf, sqrt(-large)

! To find if something is a NaN, compare it to itself.
print *, 'Does a quiet NaN equal itself:', plus_nanq .eq. plus_nanq
print *, 'Does a signaling NaN equal itself:', nans .eq. nans
! Only for a NaN is this comparison false.

end
$ xlf95 -o fp_values fp_values.f
** _main   === End of Compilation 1 ===
1501-510  Compilation successful for file fp_values.f.
$ fp_values
 Special values: INF -INF NaNQ -NaNQ NaNS
  Number too big for a REAL: INF
  Number divided by zero: -INF
  Nonsensical results: NaNQ NaNQ
 Does a quiet NaN equal itself: F
 Does a signaling NaN equal itself: F