为什么golang的float64乘法结果不一致

时间:2021-06-22 06:16:00

标签: go floating-point

Golang 的默认浮点类型是 float64,但我得到了两个不同的结果:

1.005 * 100            // 100.5
float64(1.005) * 100   // 100.49

此外,我还有一个问题:

var n = 1.005
const m = 1.005
rn := n * n    // 1.01002499
rm := m * m    // 1.010025
t.Log(rn, rm)

哪位好心人解释一下?

1 个答案:

答案 0 :(得分:1)

当将 2 个常量相乘时,数学是在编译时用任意精度算术完成的[1]。这意味着结果可以比常规浮点运算具有更高的准确度,常规浮点运算是通过 CPU 中的标准浮点运算完成的,并受精度限制。

  1. 根据规范,实现可能会限制常量的精度,但无论如何它必须远高于 float32 或 float64 的最大精度。
相关问题