友人と私は、今日の昼食時に Inf と NaN がどのように保存されるかについて議論していました。
Fortran 90 を例にとってみましょう。4 バイト実数は、Inf または NaN の値を取得できます。これは内部でどのように保存されますか? おそらく、4 バイトの実数は、32 桁の 2 進数で内部的に表される数値です。Inf と NaN は 33 ビットの 2 進数として格納されますか?
友人と私は、今日の昼食時に Inf と NaN がどのように保存されるかについて議論していました。
Fortran 90 を例にとってみましょう。4 バイト実数は、Inf または NaN の値を取得できます。これは内部でどのように保存されますか? おそらく、4 バイトの実数は、32 桁の 2 進数で内部的に表される数値です。Inf と NaN は 33 ビットの 2 進数として格納されますか?
具体的にはペストのリンクから:
IEEE 単精度浮動小数点標準表現には、左から右に 0 から 31 までの番号が付けられた 32 ビット ワードが必要です。最初のビットは符号ビット 、S
次の 8 ビットは指数ビット ' E
'、最後の 23 ビットは分数 ' F
' です。
しぇええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええ 0 1 8 9 31
V
単語によって表される値は、次のように決定できます。
E=255
andF
がゼロ以外の場合、 V=NaN
("非数") E=255
とF
がゼロでS
がの場合1
、V=-Infinity
E=255
とF
がゼロでS
がの場合0
、V=Infinity
0<E<255
then V=(-1)**S * 2 ** (E-127) * (1.F)
where " 1.F
" は、F の前に暗黙の 1 と 2 進小数点を付けることによって作成される 2 進数を表すことを意図しています。 E=0
とF
がゼロ以外の場合、V=(-1)**S * 2 ** (-126) * (0.F)
これらは「正規化されていない」値です。 E=0
とF
がゼロでS
がの場合1
、V=-0
E=0
とF
がゼロでS
がの場合0
、V=0
ほとんどの浮動小数点表現は、Inf および NaN に対して定義されたパターンを設定した IEEE 標準に基づいています。