Rumah >pembangunan bahagian belakang >C++ >Mengapa Penambahan Titik Terapung Menghasilkan Keputusan Berbeza Bergantung pada Susunan Operasi?

Mengapa Penambahan Titik Terapung Menghasilkan Keputusan Berbeza Bergantung pada Susunan Operasi?

Barbara Streisand
Barbara Streisandasal
2024-12-29 06:17:15598semak imbas

Why Does Floating-Point Addition Produce Different Results Depending on the Order of Operations?

Kaitan dalam Aritmetik Titik Terapung

Aritmetik titik terapung digunakan untuk mewakili nombor nyata dalam pengkomputeran. Disebabkan ralat pembundaran dalaman, perkaitan operasi titik terapung boleh dipersoalkan.

Masalah:

Pertimbangkan kod berikut yang menambah tiga nombor titik terapung dan membandingkan jumlah mereka kepada 1:

cout << ((0.7 + 0.2 + 0.1) == 1) << endl;     //output is 0
cout << ((0.7 + 0.1 + 0.2) == 1) << endl;     //output is 1

Mengapa ungkapan ini menghasilkan berbeza keputusan?

Jawapan:

Tambahan titik terapung tidak dijamin bersekutu. Menukar susunan nombor yang ditambah boleh mengubah keputusan kerana ralat pembundaran.

Menurut kertas kerja "Apa Yang Setiap Saintis Komputer Patut Tahu tentang Aritmetik Titik Terapung," malah kurungan dalam ungkapan boleh memberi kesan kepada keputusan . Sebagai contoh, ungkapan berikut menghasilkan nilai yang berbeza:

(x+y)+z
x+(y+z)

di mana x = 1e30, y = -1e30 dan z = 1. Ungkapan pertama menilai kepada 1, manakala ungkapan kedua menilai kepada 0.

Atas ialah kandungan terperinci Mengapa Penambahan Titik Terapung Menghasilkan Keputusan Berbeza Bergantung pada Susunan Operasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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