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

Bagaimana untuk Membandingkan Nombor Titik Terapung dengan Tepat untuk Kesamaan dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-12-10 08:14:09216semak imbas

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

Go Float Comparison: Pendekatan Komprehensif

Membandingkan nombor titik terapung (terapung) untuk kesamaan dalam Go memerlukan pendekatan yang bernuansa kerana had yang wujud dan kerumitan titik terapung aritmetik.

Menggunakan Perwakilan Bit: Penyelesaian Terhad

Kod yang disediakan membandingkan apungan dengan memeriksa perwakilan binarinya dan membenarkan perbezaan satu bit. Walau bagaimanapun, pendekatan ini adalah cacat kerana ia tidak mengambil kira kepentingan kedudukan bit dalam perwakilan binari. Sebagai contoh, perbezaan dalam bit paling tidak ketara untuk terapung yang sangat besar mungkin tidak penting, manakala untuk terapung yang sangat kecil, ia boleh mewakili sisihan yang ketara.

Pendekatan Lebih Tepat dan Generik

Kaedah yang lebih mantap dan tepat melibatkan pengiraan perbezaan antara dua apungan menggunakan fungsi matematik.Abs. Dengan menetapkan ambang yang sesuai, anda boleh menentukan sama ada perbezaan itu boleh diabaikan dan menganggap terapung "hampir sama."

Pendekatan ini membolehkan anda:

  • Mengendalikan kedua-dua terapung kecil dan besar dengan berkesan
  • Hapuskan subjektiviti heuristik perbezaan satu bit
  • Tetapkan kesaksamaan ambang berdasarkan keperluan aplikasi khusus

Contoh Pelaksanaan

Di bawah ialah contoh pelaksanaan:

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)) // true
}

Penyelesaian ini lebih generik dan boleh disesuaikan, membolehkan anda mengendalikan pelbagai senario dan menetapkan ambang kesaksamaan dengan sewajarnya untuk aplikasi anda.

Atas ialah kandungan terperinci Bagaimana untuk 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