Perbezaan Perbandingan Titik Terapung
Dalam coretan kod yang disediakan:
int main() { float a = 0.7; float b = 0.5; if (a < 0.7) { if (b < 0.5) printf("2 are right"); else printf("1 is right"); } else printf("0 are right"); }
output yang dijangkakan bagi "0 ialah betul" tidak diperolehi. Sebaliknya, "1 betul" dicetak. Percanggahan ini timbul disebabkan oleh ketidaktepatan yang wujud bagi nombor titik terapung.
Apabila melakukan perbandingan dengan operan titik terapung, ia dinaikkan secara automatik kepada nilai ketepatan dua kali. Terapung, kurang tepat daripada beregu, mungkin tidak mewakili nilai yang dimaksudkan dengan tepat. Dalam kes ini, apabila a (apungan) dibandingkan dengan 0.7 (dua kali ganda), a secara dalaman ditukar kepada dua kali ganda dan kehilangan ketepatan. Ini mengakibatkan kurang sedikit daripada 0.7, menyebabkan a < 0.7 perbandingan untuk menilai kepada benar.
Untuk menyelesaikan isu ini, seseorang boleh sama ada:
double a = 0.7; double b = 0.5;
float a = 0.7f; float b = 0.5f;
Kedua-dua pendekatan memastikan bahawa operan kekal sebagai terapung dan mengelakkan kehilangan ketepatan semasa promosi menjadi dua kali ganda.
Atas ialah kandungan terperinci Mengapa Perbandingan Titik Terapung Saya Menghasilkan Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!