说我有:
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
-它通过设置一些指数然后再使其尾数尽可能接近来尽其所能。
然后,当您考虑b
和a
的浮点表示形式并尝试将它们相加时,加法运算会在试图与a
的指数匹配时将小数b
的尾数向下移动,到值(3)落到最后并剩下0的点。因此,加法运算符最终将浮点零加到b
。
关于c - 为什么在大浮标上添加一个小浮标只会丢掉一个小浮标?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46623752/