how many whole numbers in IEEE 754

久未见 提交于 2019-11-28 13:59:45

I will assume single precision floats.

We got the zero, which although can be represented as negative zero, is still just zero as an integer so I count it as one.

Numbers with exponent less than 127 are not integers.

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

These sum up to 2^23-1. If exponent is greater than 149, all the numbers are integers. So that's an additional 105*2^23 numbers (exponent 255 is reserved). All of these come in positive and negative.

The grand total is thus

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

So looks like you were right. Nice question, it looked a lot easier at first sight :)

Patricia Shanahan

I agree with Jester's answer. As a cross-check, and to demonstrate an alternative approach, I wrote, in Java, a brute force scan of all the finite float numbers, counting the ones that are integers. Math.nextUp returns the smallest positive float for either form of zero, so zero only gets counted once.

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);
  }
}

It output 1778384895

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!