Rumah > Artikel > pembangunan bahagian belakang > Mengapa Membandingkan Float dan Double Dengan Nilai Yang Sama Kembali Palsu?
Keputusan Tidak Dijangka apabila Membandingkan Berganda dan Terapung
Perbandingan antara pembolehubah apungan f dan pembolehubah berganda d dengan nilai yang sama 1.1 secara mengejutkan kembali palsu. Keputusan yang tidak dijangka ini berpunca daripada ciri asas nombor titik terapung.
Ketepatan dan Pembundaran dalam Nombor Titik Terapung
Nombor titik terapung, termasuk jenis apungan dan berganda , mempunyai had yang wujud:
Ketepatan: Nombor titik terapung mewakili nombor nyata dalam had terhingga digit bererti. Nilai yang memerlukan lebih ketepatan daripada yang boleh dikendalikan oleh jenis data akan menghasilkan perwakilan terpenggal.
Pembulatan: Nombor binari tidak selalunya mempunyai perwakilan perpuluhan yang tepat. Apabila menukar perduaan kepada perpuluhan, pembundaran berlaku agar sesuai dengan ketepatan terhad jenis titik terapung.
Kesan ke atas Perbandingan
Disebabkan faktor ini, nilai apungan dan berganda adalah tertakluk kepada ralat pembundaran. Ralat ini boleh menyebabkan percanggahan apabila membandingkan dua nombor yang sepatutnya sama. Dalam contoh yang diberikan, apungan dan perwakilan berganda 1.1 mempunyai sedikit variasi disebabkan pembundaran, menghasilkan hasil berlawanan intuitif bagi f != d.
Amalan Terbaik
Elakkan perbandingan kesamaan langsung antara nombor titik terapung. Sebaliknya, pilih untuk menilai perbezaan mutlak antara nilai dan membandingkannya dengan ambang yang boleh diterima (epsilon):
if (abs(x - y) < epsilon) { ... }
Pendekatan ini menyumbang kepada ketidaktepatan yang wujud dalam operasi titik terapung dan menyediakan cara yang lebih dipercayai untuk tentukan sama ada dua nilai pada asasnya sama.
Atas ialah kandungan terperinci Mengapa Membandingkan Float dan Double Dengan Nilai Yang Sama Kembali Palsu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!