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
Lepaskan: 2024-12-09 19:14:11
asal
439 orang telah melayarinya

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan