在Gcc,Python和Google计算器中计算大浮点数

Rsh*_*Rsh 1 c python floating-point gcc

为什么这两个表达式的结果应该不同?
在gcc和python中也会发生同样的事情.这里发生了什么?有什么方法可以预防吗?

在此输入图像描述

在此输入图像描述

Dan*_*her 6

浮点数的精度有限.如果向较大数字(1e20)添加一个小数字(3),则结果通常与大数字相同.因此,就是这种情况

(3 + 1e20) - 1e20 = 1e20 - 1e20 = 0
Run Code Online (Sandbox Code Playgroud)

精度double大约是15位十进制数,floats大约有7位十进制数.

  • +1; 在Python中至少你可以做`(3 + int(1e20)) - int(1e20)`并获得`3`. (2认同)