Mengapa Membandingkan Float dan Double Dengan Nilai Yang Sama Kembali Palsu?

DDD
Lepaskan: 2024-10-31 15:40:56
asal
470 orang telah melayarinya

Why Does Comparing a Float and a Double With the Same Value Return False?

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) { ... }
Salin selepas log masuk

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!

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
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!