为清楚起见,如果我使用的是实现 IEE 754 浮点数的语言并声明:
float f0 = 0.f;
float f1 = 1.f;
...然后将它们打印出来,我会得到 0.0000 和 1.0000 - 完全正确。
但是 IEEE 754 不能代表实线上的所有数字。接近于零,“差距”很小;当你越走越远,差距就越大。
所以,我的问题是:对于 IEEE 754 浮点数,它是第一个(最接近于零)的整数,它不能被精确表示?我现在只真正关心 32 位浮点数,尽管如果有人给出 64 位的答案,我会很感兴趣!
我认为这就像计算 2 bits_of_mantissa并加 1 一样简单,其中bits_of_mantissa是标准公开的位数。我在我的机器(MSVC++,Win64)上为 32 位浮点数做了这个,不过看起来还不错。