浮点格式可以存储多少个不同的值?

时间:2011-10-12 17:24:38

标签: numbers ieee-754

我对IEEE 754-2008的假设:

binary16 - 2 ^ 16个不同的值, binary32 - 2 ^ 32个不同的值, ... binary128 - 2 ^ 128个不同的值。

这是对的吗?

1 个答案:

答案 0 :(得分:7)

这是一个棘手的问题。

浮点格式定义了一些特殊值。您是否将这些视为不同取决于您的观点。以下是双精度(binary64):

  1. 有两种表示形式0:符号位为0或1,指数和尾数均为零。这些值可通过1 / + 0 =无穷大和1 / -0 = -infinity的事实来区分。但他们比较平等。
  2. 有2个无穷大,其中前12位是0x7ff或0xfff,尾数全为零。这些不是有限的实数,但它们是值。
  3. 存在整个范围的非数字(NaN)值,具有符号+指数位0x7ff(信令NaN)或0xfff(“安静”NaN)和非零尾数。同样,这些不是实数,但它们是可区分的值。
  4. 所以,总结一下:

    1. 可区分值的总数(实数或其他)为2 ^ 64。
    2. 不同实数的数量,不包括无穷大,只计算一次零,是2*(2^11-1)*2^52-1 = 18,437,736,874,454,810,623
    3. 对于binary16,不同实数的数量为2*(2^5-1)*2^10-1 = 63,487。对于binary32,它是2*(2^8-1)*2^23-1=4,278,190,079。对于binary128,它是2*(2^15-1)*2^112-1或约3.4*10^38