可精确表示为浮点数/双精度数的整数范围
本文关键字:双精度 整数 范围 浮点数 表示 | 更新日期: 2023-09-27 18:05:53
可以表示为双精度数的(连续)整数的确切范围是多少?浮动?)我之所以问这个问题,是因为我对这样的问题很好奇,什么时候会出现准确性的损失。
- 使
m+1
不能精确表示为双精度数的最小正整数m
是多少?浮动)? - 使
-n-1
不能精确表示为双精度的最大负整数-n
是多少?浮动)?(可同上)
这意味着-n
和m
之间的每个整数都有一个精确的浮点表示。我基本上是在寻找范围[-n, m]
为浮点数和双精度。
让我们将范围限制为标准的IEEE 754 32位和64位浮点表示。我知道浮点数有24位精度,双精度数有53位(都有一个隐藏的前导位),但由于浮点表示的复杂性,我正在寻找一个权威的答案。请不要挥手!
(理想答案是证明从0
到m
的所有整数都是可表达的,而m+1
是不可表达的)
既然你问的是IEEE浮点类型,语言就无关紧要了。
#include <iostream>
using namespace std;
int main(){
float f0 = 16777215.; // 2^24 - 1
float f1 = 16777216.; // 2^24
float f2 = 16777217.; // 2^24 + 1
cout << (f0 == f1) << endl;
cout << (f1 == f2) << endl;
double d0 = 9007199254740991.; // 2^53 - 1
double d1 = 9007199254740992.; // 2^53
double d2 = 9007199254740993.; // 2^53 + 1
cout << (d0 == d1) << endl;
cout << (d1 == d2) << endl;
}
输出:0
1
0
1
所以浮点数的极限是2^24。双精度的极限是2^53。