inf和NaN的内部表示是什么?

时间:2009-03-12 19:16:54

标签: fortran

朋友&我正在讨论今天午餐时Inf和NaN的存储方式。

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

2 个答案:

答案 0 :(得分:21)

特别是来自Pesto的link

IEEE单精度浮点标准表示需要32位字,可以表示为从0到31编号,从左到右。第一位是符号位S,接下来的8位是指数位,“E”,最后23位是“F”小数:

S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF  
0 1      8 9                    31  

单词代表的值V可以确定如下:

  • 如果E=255F非零,则V=NaN(“非数字”)
  • 如果E=255F为零且S1,则V=-Infinity
  • 如果E=255F为零且S0,则V=Infinity
  • 如果0<E<255那么V=(-1)**S * 2 ** (E-127) * (1.F)其中“1.F”旨在表示通过为F添加隐式前导1和二进制数而创建的二进制数 点。
  • 如果E=0F非零,则V=(-1)**S * 2 ** (-126) * (0.F)这些 是“非标准化”的价值观。
  • 如果E=0F为零且S1,则V=-0
  • 如果E=0F为零且S0,则V=0

答案 1 :(得分:9)

大多数浮点表示基于IEEE标准,该标准为Inf和NaN定义了set patterns