gpt4 book ai didi

go - 为什么这两个 float64 有不同的值?

转载 作者:IT老高 更新时间:2023-10-28 13:09:50 26 4
gpt4 key购买 nike

考虑这两种情况:

fmt.Println(912 * 0.01)
fmt.Println(float64(912) * 0.01)

( Go Playground link )

第二个打印9.120000000000001,其实没问题,I understand why that is happening .

但是,为什么第一行打印的是 9.12,而末尾没有 ...01? Go 是否将两个无类型常量相乘并在编译时简单地将它们替换为 9.12 字面量?

最佳答案

根据 spec :

Constant expressions are always evaluated exactly; intermediate values and the constants themselves may require precision significantly larger than supported by any predeclared type in the language.

自从

912 * 0.01

是一个常量表达式,它被精确计算。因此,编写 fmt.Println(912 * 0.01) 与编写 fmt.Println(9.12) 具有相同的效果。当您将 912 固定到 float64 时,浮点乘法的另一个操作数也隐式固定到 float64。因此,表达式 float64(912) * 0.01 的行为类似于 float64(912) * float64(0.01)。 0.01 不能在 float64 中精确表示,因此精度在与 的参数中出现的表达式 float64(912 * 0.01) 不同的地方丢失fmt.Println() 在您的第一个示例中,解释不同的结果。

关于go - 为什么这两个 float64 有不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27819137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com