我希望)这不是关于 Go 中浮点数学准确性的问题。下面我有一个带有 2 个表达式的测试函数,我认为它们应该产生相同的结果,但给定输入,产生不同的输出。
编辑这最终只是关于浮点精度。
package main
import "fmt"
func main() {
fmt.Println(test(10.0, 0.1, 1.0)) // 0.2
fmt.Println(test(10.0, 0.2, 1.0)) // 0.3
fmt.Println(test(10.0, 0.3, 1.0)) // 0.4
fmt.Println(test(10.0, 0.4, 1.0)) // 0.5
fmt.Println(test(10.0, 0.5, 1.0)) // 0.6
}
func test(plays float64, rate float64, value float64) float64 {
// return (value/plays) + rate
return (plays*rate + value) / plays
}
第一个表达式(value/plays) + rate打印:
0.2
0.30000000000000004
0.4
0.5
0.6
而第二个表达式(plays*rate + value) / plays打印预期的输出:
0.2
0.3
0.4
0.5
0.6
为什么是这样?
相关分类