说我有:

float a = 3            // (gdb) p/f a   = 3
float b = 299792458    // (gdb) p/f b   = 299792448


然后

float sum = a + b      // (gdb) p/f sum = 299792448


我认为这与尾数的移动有关。有人可以确切说明发生了什么吗? 32位

最佳答案

32位浮点数仅具有24位精度。因此,a浮点数不能完全容纳b-它通过设置一些指数然后再使其尾数尽可能接近来尽其所能。

然后,当您考虑ba的浮点表示形式并尝试将它们相加时,加法运算会在试图与a的指数匹配时将小数b的尾数向下移动,到值(3)落到最后并剩下0的点。因此,加法运算符最终将浮点零加到b

关于c - 为什么在大浮标上添加一个小浮标只会丢掉一个小浮标?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46623752/

10-11 15:30