今天午餐时,我和一个朋友正在讨论 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
':
SEEEEEEEE FFFFFFFFFFFFFFFFFFFFF 0 1 8 9 31
单词所代表的值V
可以确定如下:
E=255
andF
非零,则V=NaN
("Not a number") 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 和二进制点而创建的二进制数。 E=0
和F
不为零,则V=(-1)**S * 2 ** (-126) * (0.F)
这些是“非标准化”值。 E=0
和F
为零并且S
是1
,那么V=-0
E=0
和F
为零并且S
是0
,那么V=0
大多数浮点表示基于 IEEE 标准,该标准为 Inf 和 NaN 定义了设置模式。