在过去的2周里,我一直在研究浮点的行为和功能,特别是GO中的大浮点。我遇到了许多行为,并自己找到了答案。但是,仍然有一个答案我找不到自己。
https://play.golang.org/p/-y0oeb2Jisv
value1 := big.NewFloat(137216723432.8234782347)
value2 := big.NewFloat(71371.92602458)
for i := 0; i < 300; i++ {
value1.Sub(value1, value2)
}
value3 := big.NewFloat(137216723432.8234782347)
value4 := big.NewFloat(71371.92602458)
for i := 0; i < 300; i++ {
result := big.NewFloat(0).Sub(value3,value4)
value3.Set(result)
}
encodedValue1, _ := value1.GobEncode()
encodedValue3, _ := value3.GobEncode()
if value1 == value3 {
fmt.Println("values are equal" , value1 , value3)
} else {
fmt.Println("values are not equal", value1 ,value3)
}
fmt.Println("difference is here:\n", encodedValue1,"\n", encodedValue3)
为什么这两个操作的结果不相等?根据我的理解,这与精度/准确性/舍入模式有关。
偶然的你
相关分类