IEEE 754 中有多少个整数
how many whole numbers in IEEE 754
我想弄清楚 ieee 754 中有多少个不同的整数。我得到的数字是 1778384895,但我找不到任何资源来检查自己。
非常感谢。
我假设单精度浮点数。
我们得到了零,虽然它可以表示为负零,但作为整数仍然只是零,所以我把它算作一。
指数小于 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
看来你是对的。好问题,乍一看看起来容易多了:)
我同意。作为交叉检查并展示替代方法,我在 Java 中写道,对所有有限浮点数进行强力扫描,计算整数。 Math.nextUp returns 两种形式的零的最小正浮点数,因此零只计算一次。
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
我想弄清楚 ieee 754 中有多少个不同的整数。我得到的数字是 1778384895,但我找不到任何资源来检查自己。 非常感谢。
我假设单精度浮点数。
我们得到了零,虽然它可以表示为负零,但作为整数仍然只是零,所以我把它算作一。
指数小于 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
看来你是对的。好问题,乍一看看起来容易多了:)
我同意
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