Go 浮點數比較:一種幾乎相等的有效方法
在Go 中,比較兩個浮點數(float64) 是否相等可能是一項棘手的任務由於IEEE 754 浮點表示的限制。雖然傳統的“abs(diff)
建議的解決方案:位級比較
建議的解決方案:位級比較
建議的解決方案:位級比較
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 }
建議的解決方案:位級級比較
建議的解決方案:位級和位級比較解決方案建議比較float64 值的位元表示。基本原理是二進位表示中的一位差異可確保接近相等,因為任何較大的差異都會導致不同的符號位或指數。雖然這種方法看起來很有希望,但它受到限制:
精確度損失:
按位比較會忽略浮點數的精確度,導致潛在的不準確。const float64EqualityThreshold = 1e-9 func almostEqual(a, b float64) bool { return math.Abs(a - b) <= float64EqualityThreshold }
以上是在 Go 中如何有效地比較浮點數以使其接近相等?的詳細內容。更多資訊請關注PHP中文網其他相關文章!