Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Membandingkan Nombor Titik Terapung dengan Tepat untuk Kesamaan dalam Go?

Bagaimanakah Saya Boleh Membandingkan Nombor Titik Terapung dengan Tepat untuk Kesamaan dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-12-09 19:14:11408semak imbas

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

Pergi: Cara Lebih Bijak untuk Membandingkan Terapung

Semasa anda menyelidiki kerumitan IEEE 754 dan perwakilan apungan binari, anda mungkin menghadapi soalan berlarutan: bagaimana untuk membandingkan dua apungan dengan tepat untuk kesamaan dalam Go. Satu pendekatan yang berpotensi adalah untuk mengkaji perbezaan tahap bit, menggunakan penyelesaian seperti ini:

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
}

Kaedah ini bertujuan untuk membenarkan perbezaan bit tunggal, menganggap ini sebagai "hampir sama." Walau bagaimanapun, pendekatan ini mempunyai had.

Pendekatan yang Lebih Berkesan

Daripada bergantung pada manipulasi bit, penyelesaian yang lebih dipercayai adalah dengan menolak terus dua nombor dan semak perbezaan mutlak terhadap ambang yang telah ditetapkan. Pendekatan ini lebih intuitif dan tepat:

const float64EqualityThreshold = 1e-9

func almostEqual(a, b float64) bool {
    return math.Abs(a - b) <= float64EqualityThreshold
}

Mengapa Ia Superior

Kaedah ini mengelakkan perangkap perwakilan bit, yang boleh membawa kepada perbandingan yang tidak tepat dalam situasi tertentu . Dengan membandingkan secara langsung perbezaan berangka, anda memperoleh ketepatan dan ketepatan yang lebih tinggi. Selain itu, ia menghapuskan keperluan untuk memeriksa perbezaan bit secara manual, menjadikan kod lebih ringkas dan boleh diselenggara.

Ringkasnya, untuk membandingkan apungan dalam Go, pendekatan yang disyorkan ialah menolak dua nombor dan membandingkan perbezaan mutlak dengan ambang yang telah ditetapkan. Kaedah ini menyediakan cara yang lebih tepat dan cekap untuk menentukan "hampir kesamaan" berbanding manipulasi bit.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Nombor Titik Terapung dengan Tepat untuk Kesamaan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn