朋友&我正在讨论今天午餐时Inf和NaN的存储方式。
以Fortran 90为例。 4字节实数可以获得Inf或NaN的值。这是如何在内部存储的?据推测,4字节的实数是由32位二进制数内部表示的数字。 Inf和NaN是否存储为33位二进制数?
答案 0 :(得分:21)
特别是来自Pesto的link:
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<E<255
那么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
答案 1 :(得分:9)
大多数浮点表示基于IEEE标准,该标准为Inf和NaN定义了set patterns。