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

最佳答案

浮点数的精度有限如果将小数字(3)添加到大数字(1e20)中,结果通常与大数字相同这里就是这样,因此

(3 + 1e20) - 1e20 = 1e20 - 1e20 = 0

double的精度约为15位小数,floats的精度约为7位小数。

10-08 20:01