Go 浮點數比較:一種更精確、更有效率的方法
Go 中比較兩個浮點數(float64) 是否相等的任務通常涉及處理IEEE 754 的複雜性和浮點數的二進位表示。雖然有多種方法,但有些人認為將二進位表示與一位容差進行比較是一種可靠的解決方案:
func Equal(a, b float64) bool { ba := math.Float64bits(a) bb := math.Float64bits(b) diff := ba - bb if diff < 0 { diff = -diff } // accept one bit difference return diff < 2 }
但是,這種方法有其限制。在比較「幾乎相等」的值時,浮點數的二進位表示形式並不總是有意義。更直接和精確的方法是透過兩個數字相減來確定它們的差異:
package main import ( "fmt" "math" ) const float64EqualityThreshold = 1e-9 func almostEqual(a, b float64) bool { return math.Abs(a - b) <= float64EqualityThreshold } func main() { a := 0.1 b := 0.2 fmt.Println(almostEqual(a + b, 0.3)) }
這種方法設定了最大可接受差異的閾值,適用於大多數需要比較浮點數是否相等的實際場景。它提供了比比較二進位表示更精確、更有效率的解決方案。
以上是如何在Go中準確且有效率地比較浮點數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!