Pengiraan titik terapung boleh membawa kepada percanggahan disebabkan oleh pengehadan perwakilan binari. Walaupun satu penyelesaian yang berpotensi adalah untuk mengubah tetapan ketepatan dalam php.ini, adalah penting untuk menilai kebolehpercayaannya.
Tidak, mengubah suai tetapan ketepatan sahaja tidak dapat menjamin pengiraan 2 digit yang tepat, terutamanya apabila berurusan dengan kuantiti yang lebih besar daripada 10^6.
Untuk menunjukkan kelemahan pendekatan ini, pertimbangkan contoh berikut:
$a = 5.88; $q = 2.49; $b = $a * 0.01; echo ($a * $q) - $b;
Output:
14.5824
Walaupun dengan ketepatan 8, hasilnya bukan nilai 2 digit yang tepat kerana perantaraan pengiraan.
Daripada bergantung pada penyelesaian ketepatan, pertimbangkan penyelesaian alternatif:
Soalan 1 : Julat Kegagalan dengan Ketepatan = 8
Adalah tidak praktikal untuk menguji semua gabungan nombor antara 0 dan 999999.99. Walau bagaimanapun, ujian mudah menunjukkan bahawa walaupun dengan ketepatan 8, ketidaktepatan boleh berlaku:
$a = 0.19; $b = 0.16; $i = 0; for ($c = 0.01; $c <= 0.07; $c += 0.01) { $i = $i + $c; } echo $i - ($a + $b);
Output:
0.000055879354492188
Ralat ini disebabkan oleh pengumpulan ralat pembundaran semasa penambahan nombor titik terapung.
Soalan 2: Anggaran Kegagalan Matematik Ambang
Menganggarkan ambang kegagalan memerlukan analisis matematik yang kompleks. Perbincangan menyeluruh mengenai topik ini adalah di luar skop artikel ini.
Walau bagaimanapun, adalah penting untuk diingat bahawa pengiraan titik terapung mempunyai had ketepatan yang wujud disebabkan oleh perwakilan binari nombor. Oleh itu, bergantung pada penyelesaian ketepatan sahaja bukanlah penyelesaian yang mudah.
Atas ialah kandungan terperinci Bolehkah mengubah suai tetapan ketepatan PHP menjamin pengiraan perpuluhan 2 digit yang tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!