Kes Membingungkan Kesamaan Titik Terapung
Dalam bidang pembangunan perisian, topik perbandingan titik terapung telah mencetuskan perdebatan yang tidak terkira banyaknya . Walaupun diketahui secara meluas bahawa ketepatan titik terapung memberikan cabaran untuk menentukan kesaksamaan, masih terdapat senario di mana penggunaan == mungkin tidak bermasalah seperti yang diandaikan.
Mari kita rungkai contoh kod khusus yang dibangkitkan:
// Defined in somewhere.h static const double BAR = 3.14; // Code elsewhere.cpp void foo(double d) { if (d == BAR) ... }
Timbul persoalan sama ada terdapat situasi di mana perbandingan ini sah. Jawapannya terletak pada sifat asas perwakilan data titik terapung.
IEEE 754, piawaian lazim untuk operasi titik terapung, menjamin bahawa perwakilan integer dalam julat tertentu adalah tepat apabila disimpan sebagai terapung. Dalam erti kata lain, nombor bulat, termasuk 0.0, boleh dibandingkan secara langsung menggunakan == tanpa rasa takut akan ralat ketepatan.
Oleh itu, dalam kod yang diberikan, selagi BAR dimulakan dengan nilai integer dalam julat apungan , perbandingan d == BAR adalah selamat dan boleh dipercayai.
Namun, apabila berurusan dengan pembolehubah yang telah menjalani operasi atau pengiraan matematik, keadaan menjadi lebih kompleks. Walaupun sesetengah pengiraan mungkin menghasilkan nilai integer tepat, yang lain mungkin memperkenalkan ralat pembundaran yang membatalkan kesamaan apungan.
Begitu juga, panggilan foo(BAR) akan sentiasa membandingkan sama, dengan mengandaikan bahawa BAR sememangnya pemalar integer. Ini kerana kedua-dua pembolehubah menggunakan pemalar statik yang sama, yang dijamin mewakili nilai integer asas yang sama.
Kesimpulannya, walaupun kesamaan titik terapung secara amnya harus dilayan dengan berhati-hati, terdapat senario khusus yang boleh digunakan dengan penuh keyakinan. Apabila membandingkan nombor integer dalam julat terapung atau menggunakan pemalar statik, pengaturcara boleh bergantung pada sifat tepat perwakilan titik terapung untuk melakukan semakan kesamaan yang boleh dipercayai.
Atas ialah kandungan terperinci Adakah Persamaan Titik Terapung Boleh Dipercayai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!