Mengapa Perbandingan Terapung PHP Saya Gagal Apabila Ia Harus Berjaya?

Patricia Arquette
Lepaskan: 2024-11-01 00:32:28
asal
499 orang telah melayarinya

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!