今天午餐时,我和一个朋友正在讨论 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=255andF非零,则V=NaN("Not a number") E=255和F为零并且S是1,那么V=-Infinity E=255和F为零并且S是0,那么V=Infinity 0<E<255then 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 定义了设置模式。