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

use*_*ter 4 numbers ieee-754

我对IEEE 754-2008的假设:

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

它是否正确?

Jef*_*Sax 7

这是一个棘手的问题.

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

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

所以,总结一下:

  1. 可区分值的总数(实数或其他)是2 ^ 64.
  2. 不同实数的数量,不包括无穷大,只计算一次零,是2*(2^11-1)*2^52-1 = 18,437,736,874,454,810,623.

对于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.