Rumah > pembangunan bahagian belakang > C++ > Mengapa Pengiraan Titik Terapung Menghasilkan Keputusan Yang Tidak Dijangka?

Mengapa Pengiraan Titik Terapung Menghasilkan Keputusan Yang Tidak Dijangka?

DDD
Lepaskan: 2024-11-29 02:22:13
asal
611 orang telah melayarinya

Why Do Floating-Point Calculations Produce Unexpected Results?

Berurusan dengan Had Ketepatan dalam Pengiraan Titik Terapung

Nombor titik terapung digunakan secara meluas dalam pengkomputeran, tetapi ia datang dengan had ketepatan yang wujud . Satu isu sedemikian ialah ketidakupayaan untuk mewakili semua nombor nyata dengan tepat, yang membawa kepada ralat pembundaran semasa pengiraan.

Isu dengan Perwakilan Titik Terapung

Pertimbangkan kod berikut yang cuba untuk mengira bilangan lajur berdasarkan nilai tertentu:

double mw = 4.5999999999999996; // Represented as 4.6 internally
double p = 0.2;
double g = 0.2;
int h = 1;
int columns = (int) ((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1;
Salin selepas log masuk

Walaupun mempunyai hasil yang diingini daripada 2, program tidak betul mengeluarkan 1. Ini kerana perwakilan titik terapung dalaman 4.6 (4.5999999999999996) menyebabkan ralat pembundaran dalam pengiraan.

Mengatasi Isu Ketepatan

Mengatasi isu ketepatan ini memerlukan mengiktiraf had aritmetik titik terapung:

  • Elakkan Kesamaan Tegas: Daripada menyemak kesamaan tepat kepada nilai tertentu, gunakan julat nilai yang boleh diterima untuk mengambil kira ralat pembundaran .
  • Pertimbangkan Perwakilan Nombor Berbeza: Meneroka perwakilan nombor alternatif seperti nombor titik tetap boleh memberikan pengiraan yang lebih tepat untuk kes penggunaan tertentu.
  • Fahami Aritmetik Titik Terapung: Membiasakan diri dengan prinsip aritmetik titik terapung membantu dalam memahami potensi had ketepatan dan membangunkan strategi untuk mengurangkannya.

Atas ialah kandungan terperinci Mengapa Pengiraan Titik Terapung Menghasilkan Keputusan Yang Tidak Dijangka?. 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