3

我试图弄清楚 ieee 754 中存在多少个不同的整数。我得到的数字是 1778384895,但我找不到任何资源来检查自己。提前非常感谢。

4

2 回答 2

8

我将假设单精度浮点数。

我们得到了零,虽然可以表示为负零,但仍然只是零作​​为整数,所以我把它算作一。

指数小于 127 的数字不是整数。

Exponent   Free bits   # Numbers
127        0           1
128        1           2
129        2           4
...
149        22          2^22

这些总和2^23-1。如果指数大于 149,则所有数字都是整数。所以这是一个额外的105*2^23数字(保留指数 255)。所有这些都有正面和负面的。

总和是这样的

1 + ((2^23 - 1) + 105 * (2^23)) * 2 = 1778384895

所以看起来你是对的。好问题,乍一看看起来容易多了:)

于 2015-11-20T23:46:17.713 回答
3

我同意小丑的回答。作为交叉检查并演示另一种方法,我用 Java 编写了对所有有限浮点数的蛮力扫描,计算整数。Math.nextUp 返回任一形式的零的最小正浮点数,因此零只计算一次。

public class Test {
  public static void main(String[] args) {
    long count = 0;
    for (float f = -Float.MAX_VALUE; f <= Float.MAX_VALUE; f = Math.nextUp(f)) {
      if (Math.rint(f) == f) {
        count++;
      }
    }
    System.out.println(count);
  }
}

它输出 1778384895

于 2015-11-21T02:33:47.593 回答