10

今天午餐时,我和一个朋友正在讨论 Inf 和 NaN 是如何存储的。

以 Fortran 90 为例。4 字节实数可以获得 Inf 或 NaN 的值。这是如何在内部存储的?据推测,4 字节实数是由 32 位二进制数在内部表示的数字。Inf 和 NaN 是否存储为 33 位二进制数?

4

2 回答 2

20

具体来自 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=255F为零并且S1,那么V=-Infinity
  • 如果E=255F为零并且S0,那么V=Infinity
  • 如果0<E<255then V=(-1)**S * 2 ** (E-127) * (1.F)where " 1.F" 旨在表示通过在 F 前加上隐式前导 1 和二进制点而创建的二进制数。
  • 如果E=0F不为零,则V=(-1)**S * 2 ** (-126) * (0.F)这些是“非标准化”值。
  • 如果E=0F为零并且S1,那么V=-0
  • 如果E=0F为零并且S0,那么V=0
于 2009-03-12T19:39:00.510 回答
9

大多数浮点表示基于 IEEE 标准,该标准为 Inf 和 NaN 定义了设置模式。

于 2009-03-12T19:20:53.300 回答