什么是可以表示为double(或float)的(连续)整数的确切范围?我问这个问题是因为我对类似于此类问题的精度损失感到好奇。
也就是说,
也就是说,
- 最小的正整数m是多少,以至于m + 1无法准确表示为double(或float)?
- 最大的负整数-n是多少,以至于-n-1不能准确表示为double(或float)?(可能与上述相同)。
让我们将范围限制在标准IEEE 754的32位和64位浮点表示上。 我知道float具有24位精度,double具有53位精度(两者都带有隐藏的前导位),但由于浮点表示的复杂性,我正在寻找权威答案。请不要含糊其辞!
(理想答案将证明从0
到m
的所有整数都是可表达的,而m+1
则不是。)
float f = 0; for (;;++f) { if (f == (f+1)) { cout << f; break; } }
。双精度和负数同理。 - Scott Mermelstein