我写了一个程序来演示 Go 中的浮点错误:
func main() {
a := float64(0.2)
a += 0.1
a -= 0.3
var i int
for i = 0; a < 1.0; i++ {
a += a
}
fmt.Printf("After %d iterations, a = %e\n", i, a)
}
它打印:
After 54 iterations, a = 1.000000e+00
这与用 C 编写的同一程序的行为相匹配(使用double类型)
但是,如果float32改为使用,程序会陷入无限循环!如果您修改 C 程序以使用 afloat而不是 a double,它会打印
After 27 iterations, a = 1.600000e+00
为什么 Go 程序在使用时没有与 C 程序相同的输出float32?
呼如林
相关分类