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:
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!