Hasil Tidak Dijangka Apabila Membandingkan Jenis Data Berganda dan Terapung
Apabila membandingkan nombor titik terapung berketepatan ganda (berganda) kepada titik terapung ketepatan tunggal nombor (terapung), anda mungkin menghadapi keputusan yang tidak dijangka. Secara khusus, semakan kesamaan (f == d) antara pembolehubah apungan f dan pembolehubah berganda d mungkin mengembalikan palsu walaupun kedua-dua nilai kelihatan sama.
Tingkah laku ini berpunca daripada dua faktor asas yang dikaitkan dengan terapung- nombor titik: ketepatan dan pembundaran.
Ralat Ketepatan dan Pembundaran
Implikasi untuk Pemeriksaan Kesaksamaan
Ketepatan dan pembundaran yang wujud dalam terapung- nombor mata boleh membawa kepada ralat pembundaran, terutamanya apabila membandingkan nilai yang sangat hampir antara satu sama lain. Ralat ini terkumpul, menyebabkan perbandingan kesamaan gagal. Ini menjadikan semakan kesamaan langsung untuk nombor titik terapung tidak boleh dipercayai dan terdedah kepada negatif palsu.
Penyelesaian: Membandingkan dengan Epsilon
Daripada menggunakan semakan kesaksamaan, yang lebih dipercayai kaedah untuk membandingkan nombor titik terapung adalah dengan mengambil perbezaan mutlak antara mereka dan menyemak sama ada ia berada di bawah nilai kecil yang dikenali sebagai epsilon (ε). Ini membolehkan anda mengambil kira ralat pembundaran dan menentukan sama ada perbezaan itu tidak penting untuk aplikasi anda.
if (abs(x - y) < epsilon)
Atas ialah kandungan terperinci Mengapakah membandingkan nilai `float` dan `double` kadangkala mengembalikan `palsu` walaupun ia kelihatan sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!