为什么这些行给出不同的结果?
log.Printf("%v\n", (float64(1.0 - 0.94))) // 0.06
log.Printf("%v\n", (float64(1.0) - float64(0.94))) // 0.06000000000000005
第一行使用的文字不是 float64 吗? 如果不是 float64,则使用什么精度来计算第一行的答案? 如果第一行是在编译时计算的,那么编译器使用的精度是多少?
go version go1.23.2 darwin/arm64
根据语言规范,在编译时评估的无类型常量(第一个示例中的操作)的操作使用比语言中任何类型更高的精度。