Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Perbandingan Terapung PHP Saya Gagal Apabila Ia Harus Berjaya?

Mengapa Perbandingan Terapung PHP Saya Gagal Apabila Ia Harus Berjaya?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 00:32:28500semak imbas

Why Does My PHP Float Comparison Fail When It Should Succeed?

Teka-teki Ketepatan Pengiraan Apungan PHP

Pengiraan titik terapung dalam pengaturcaraan selalunya boleh menimbulkan cabaran kerana sifatnya yang tidak tepat. Seperti yang ditunjukkan dalam coretan kod PHP, membandingkan dua nombor titik terapung dengan ambang mungkin tidak selalu menghasilkan hasil yang diharapkan.

Perumusan Masalah:

Kod PHP yang disediakan melibatkan operasi berikut:

  1. Tetapkan nilai apungan khusus kepada $fooValue dan $cowValue.
  2. Kira perbezaan antara nilai ini dan simpan dalam $diffValue.
  3. Semak sama ada $diffValue kurang daripada atau sama dengan 0.01, kemudian gema "berjaya"; jika tidak, bergema "ralat."

Isunya terletak pada membandingkan apungan dengan ambang menggunakan <=. Dalam kes ini, kod mempamerkan tingkah laku yang tidak dijangka dengan mengeluarkan "ralat" walaupun perbezaannya hampir sifar.

Penjelasan Penyelesaian:

Ketaktepatan dalam pengiraan titik terapung berpunca daripada kehilangan ketepatan semasa penukaran daripada perpuluhan kepada binari dan sebaliknya. Oleh itu, perbandingan menggunakan == atau <=, yang memerlukan kesaksamaan yang tepat, mungkin tidak selalu menghasilkan keputusan yang tepat.

Untuk menyelesaikan isu ini, pendekatan alternatif seperti:

  • Perpustakaan Matematik BC: Menyediakan fungsi khusus untuk aritmetik titik terapung dengan ketepatan yang lebih tinggi.
  • Perpustakaan GMP: Menggunakan integer untuk pengiraan, yang menghapuskan potensi ketidaktepatan titik terapung. Walau bagaimanapun, ia memerlukan penukaran antara integer dan terapung, yang mungkin menyebabkan kehilangan ketepatan.

Dengan menggunakan perpustakaan ini, pengaturcara boleh mengurangkan ketidaktepatan yang wujud dalam pengiraan titik terapung dan mencapai perbandingan yang lebih tepat.

Atas ialah kandungan terperinci Mengapa Perbandingan Terapung PHP Saya Gagal Apabila Ia Harus Berjaya?. 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