我和朋友在午餐期间辩论如何存储Inf和NaN值。
以Fortran 90为例。4字节实数可以获得Inf或NaN的值。这是如何在内部存储的?据推测,4字节实数是一个由32位二进制数字表示的数字。Inf和NaN是否存储为33位二进制数字?
我和朋友在午餐期间辩论如何存储Inf和NaN值。
以Fortran 90为例。4字节实数可以获得Inf或NaN的值。这是如何在内部存储的?据推测,4字节实数是一个由32位二进制数字表示的数字。Inf和NaN是否存储为33位二进制数字?
具体来说,来自Pesto的 链接:
IEEE单精度浮点标准表示法需要一个32位的字,可以从0到31进行编号,从左到右表示。第一位是符号位S
,下一位八位是指数位E
,最后23位是小数部分F
。
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 0 1 8 9 31
由该词所表示的值V
可以按以下方法确定:
E=255
and F
is nonzero, then V=NaN
("Not a number") E=255
and F
is zero and S
is 1
, then V=-Infinity
E=255
and F
is zero and S
is 0
, then V=Infinity
0<E<255
then V=(-1)**S * 2 ** (E-127) * (1.F)
where "1.F
" is intended to represent the binary number created by prefixing F with an implicit leading 1 and a binary
point. E=0
and F
is nonzero, then V=(-1)**S * 2 ** (-126) * (0.F)
These
are "unnormalized" values. E=0
and F
is zero and S
is 1
, then V=-0
E=0
and F
is zero and S
is 0
, then V=0
大多数浮点表示都基于IEEE标准,该标准有为Inf和NaN定义的设置模式。