Rumah >pembangunan bahagian belakang >C++ >Mengapa Perbandingan Titik Terapung Tidak Tepat, dan Bagaimana Saya Boleh Memastikan Keputusan yang Betul?
Kekeliruan Perbandingan Titik Terapung
Dalam coretan kod yang diberikan, semakan perbandingan antara nombor titik terapung tidak semudah yang dijangkakan . Apabila berurusan dengan perbandingan titik terapung, adalah penting untuk memahami perwakilan titik terapung dan kemungkinan perangkap yang timbul.
Perangkap Titik Terapung
Isu dengan kod itu terletak pada perbandingan nombor titik terapung. Nombor titik terapung disimpan dalam format binari yang menggunakan bilangan bit terhingga untuk mewakili kedua-dua magnitud dan eksponen. Ini bermakna terdapat had yang wujud dalam ketepatan nombor titik terapung boleh mewakili nilai tertentu, yang membawa kepada ralat pembundaran.
Dalam kod yang disediakan, pembolehubah a dan b ditakrifkan sebagai apungan. Apabila membandingkan a kepada 0.7, pengkompil mempromosikan apungan kepada dua kali ganda untuk perbandingan. Promosi jenis ini boleh mengakibatkan kehilangan ketepatan, kerana perwakilan berganda a mungkin tidak betul-betul sama dengan 0.7. Tambahan pula, 0.5 ialah kuasa tepat 2, yang boleh diwakili dengan tepat dalam format titik terapung.
Akibatnya, perbandingan a < 0.7 akan dinilai kepada benar disebabkan oleh kenaikan pangkat kepada gandaan dan perwakilan tidak tepat 0.7. Ini menerangkan output yang tidak dijangka bagi "1 adalah betul" dan bukannya jangkaan "0 adalah betul."
Memastikan Perbandingan yang Betul
Untuk mengelakkan isu sedemikian, terdapat dua pendekatan yang mungkin:
Atas ialah kandungan terperinci Mengapa Perbandingan Titik Terapung Tidak Tepat, dan Bagaimana Saya Boleh Memastikan Keputusan yang Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!