为了更清晰地说明,如果我在使用一个实现IEEE 754浮点数的语言,并声明:
float f0 = 0.f;
float f1 = 1.f;
如果我对一个IEEE 754浮点数执行操作(比如加、减或乘),然后将它们打印出来,我会得到0.0000和1.0000——完全一致。
但是IEEE 754不能表示实数线上的所有数字。接近零时,“间隙”很小;当你远离零时,这些间隙变得越来越大。
因此,我的问题是:对于一个IEEE 754浮点数,哪个是第一个(最接近零)无法精确表示的整数?目前我只关心32位浮点数,不过如果有人提供64位浮点数的答案,我也会感兴趣!
我认为这应该很简单,只需要计算2bits_of_mantissa并加1,其中bits_of_mantissa是标准暴露出的位数。我在我的机器上(MSVC++,Win64)对32位浮点数进行了这样的计算,似乎没有问题。