3

ieee 754 にいくつの異なる整数が存在するかを調べようとしています。取得した数値は 1778384895 でしたが、自分で確認するためのリソースが見つかりませんでした。よろしくお願いします。

4

2 に答える 2

8

単精度浮動小数点数を想定しています。

負のゼロとして表すこともできますが、整数としてはゼロであるため、1 として数えます。

指数が 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 は、どちらの形式のゼロに対しても最小の正の浮動小数点数を返すため、ゼロは 1 回だけカウントされます。

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 に答える