Go 中浮点文字的精度

问题描述 投票:0回答:1

为什么这些行给出不同的结果?

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

go floating-point precision
1个回答
0
投票

根据语言规范,在编译时评估的无类型常量(第一个示例中的操作)的操作使用比语言中任何类型更高的精度。

https://go.dev/ref/spec#Constant_expressions

© www.soinside.com 2019 - 2024. All rights reserved.