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

问题描述:

我给IEEE 754-2008假设:可以以浮点格式存储多少个不同的值?

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

这是正确的吗?

这是一个技巧性的问题。

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

  1. 有0两种表示:与该符号位为0或1和二者的指数和尾数都为零。这些值可以通过1/+ 0 =无穷大和1/-0 = - 无穷的事实来区分。但他们比较平等。
  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

+0

是的,我忘了NaN范围。所以对于binary32有2 *(2^8-1)* 2^23-1 = 4278190079,对吗? – user894319twitter

+0

为清楚起见,使用binary16:它是'2 *(2^5-1)*(2^10-1)'还是'(2 *(2^5-1)* 2^10)-1'?后者对我来说更有意义,但如果它是前者,你能否澄清? –