我和朋友正在讨论今天午餐时Inf和NaN的存储方式.
以Fortran 90为例.4字节实数可以获得Inf或NaN的值.这是如何在内部存储的?据推测,4字节实数是由32位二进制数内部表示的数字.Inf和NaN是否存储为33位二进制数?
特别是从Pesto的链接:
IEEE单精度浮点标准表示需要32位字,其可以表示为从左到右编号为0到31.第一位是符号位,S
接下来的8位是指数位' E
',最后23位是分数' F
':
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 0 1 8 9 31
该V
单词表示的值可以确定如下:
如果E=255
且F
非零,那么V=NaN
("不是数字")
如果E=255
和F
是零和S
的1
,然后V=-Infinity
如果E=255
和F
是零和S
的0
,然后V=Infinity
如果0
V=(-1)**S * 2 ** (E-127) * (1.F)
" 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定义的模式.