Rumah >pembangunan bahagian belakang >C++ >Adakah Bersekutu Aritmetik Titik Terapung?

Adakah Bersekutu Aritmetik Titik Terapung?

Susan Sarandon
Susan Sarandonasal
2024-12-08 04:47:09435semak imbas

Is Floating-Point Arithmetic Associative?

Perkaitan Aritmetik Titik Terapung

Aritmetik titik terapung digunakan secara meluas dalam pengkomputeran saintifik, namun persoalan pelik timbul: Adakah ia bersekutu untuk penambahan dan pendaraban? Pertanyaan yang kelihatan mudah ini mempunyai kerumitan tersembunyi.

Dalam bidang penambahan titik terapung, persekutuan tidak selalu dijamin. Contoh yang menarik ialah kod berikut:

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

Kami terkejut, kedua-dua pernyataan ini menghasilkan hasil yang berbeza. Mengapa demikian?

Penjelasan terletak pada pengehadan perwakilan titik terapung. Nombor titik terapung disimpan sebagai anggaran nilai sebenar, memperkenalkan tahap ketidaktepatan. Apabila menambah berbilang nilai titik terapung, susunan operasi adalah penting kerana ralat terkumpul dan pembundaran.

Seperti kertas standard yang dirujuk, "Apa Yang Setiap Ahli Sains Komputer Patut Tahu tentang Aritmetik Titik Terapung," dengan tepat menyatakan:

"Disebabkan ralat pembulatan, undang-undang bersekutu algebra tidak semestinya memegang untuk titik terapung nombor."

Atas ialah kandungan terperinci Adakah Bersekutu Aritmetik Titik Terapung?. 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