Membandingkan Nilai Titik Terapung dengan Pemuliharaan Ketepatan
Perbandingan titik terapung menimbulkan cabaran kerana kehilangan ketepatan. Hanya membandingkan beregu atau apungan menggunakan == tidak boleh dipercayai.
Perbandingan berasaskan Epsilon
Satu pendekatan melibatkan penggunaan ambang epsilon (ε) untuk mengambil kira kehilangan ketepatan:
bool CompareDoubles2(double A, double B) { double diff = A - B; return (diff < EPSILON) && (-diff < EPSILON); }
Walau bagaimanapun, pendekatan ini boleh tidak cekap.
Pertimbangan Bergantung Konteks
Pilihan kaedah perbandingan bergantung pada konteks dan nilai yang dijangkakan. Pertimbangkan kemungkinan perangkap berikut:
Epsilon Standard
std::numeric_limits Akibat Aritmetik Integer Menggunakan dua kali ganda untuk memegang nilai integer boleh membawa kepada pembetulan aritmetik, selagi pecahan atau nilai di luar julat integer dielakkan. Contohnya, 4.0/2.0 akan bersamaan dengan 1.0 1.0. Atas ialah kandungan terperinci Bagaimanakah Nilai Titik Terapung Boleh Dibandingkan Dengan Tepat Semasa Mengakaunkan Kerugian Ketepatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!