首頁 > 後端開發 > Golang > 在 Go 中如何準確比較浮點數是否相等?

在 Go 中如何準確比較浮點數是否相等?

Linda Hamilton
發布: 2024-12-09 19:14:11
原創
438 人瀏覽過

How Can I Accurately Compare Floating-Point Numbers for Equality in Go?

Go:比較浮點數的更聰明方法

當您深入研究IEEE 754 和二進位浮點表示的複雜性時,您可能會遇到揮之不去的問題:如何在Go 中準確比較兩個浮點數是否相等。一種可能的方法是使用以下解決方案檢查位元級差異:

func Equal(a, b float64) bool {
    ba := math.Float64bits(a)
    bb := math.Float64bits(b)
    diff := ba - bb
    if diff < 0 {
        diff = -diff
    }
    return diff < 2
}
登入後複製

此方法旨在允許單位元差異,將其視為「幾乎相等」。不過這種方法也有其限制。

更有效的方法

相比依賴位操作,更可靠的解決方案是直接將兩個數字相減,然後檢查與預定義閾值的絕對差。這種方法更直觀和準確:

const float64EqualityThreshold = 1e-9

func almostEqual(a, b float64) bool {
    return math.Abs(a - b) <= float64EqualityThreshold
}
登入後複製

為什麼它優越

這種方法避免了位表示的陷阱,在某些情況下可能會導致比較不精確。透過直接比較數值差異,您可以獲得更高的精度和準確度。另外,它不需要手動檢查位元差異,使程式碼更加簡潔和可維護。

綜上所述,在 Go 中比較浮點數時,建議的方法是將兩個數字相減,然後比較絕對差值預先定義的閾值。與位元操作相比,此方法提供了一種更準確、更有效的方法來確定「幾乎相等」。

以上是在 Go 中如何準確比較浮點數是否相等?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板