Rumah >pembangunan bahagian belakang >C++ >Mengapa Penambahan Titik Terapung Tidak Sentiasa Mengikuti Undang-undang Bersekutu?
Aritmetik Titik Terapung: Meneroka Persekutuan dalam Operasi Titik Terapung
Dalam bidang pengaturcaraan, nombor titik terapung adalah penting untuk berfungsi dengan nilai berterusan. Walau bagaimanapun, aritmetik titik terapung kadangkala boleh berkelakuan berbeza daripada matematik yang kami pelajari di sekolah, terutamanya apabila ia berkaitan dengan persekutuan.
Pertimbangkan contoh menambah tiga nilai titik terapung dan membandingkannya dengan 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
Anehnya, kedua-dua ungkapan itu menghasilkan hasil yang berbeza. Percanggahan ini berpunca daripada fakta bahawa penambahan titik terapung tidak selalu bersekutu. Dalam erti kata lain, mengubah susunan kita menambah nilai boleh mengubah hasil akhir.
Fenomena tidak berpersatuan timbul disebabkan oleh pengehadan perwakilan titik terapung. Nombor titik terapung menggunakan format binari dengan bilangan bit terhingga, yang mengehadkan ketepatannya. Akibatnya, pengiraan dengan nombor titik terapung boleh memperkenalkan ralat pembundaran yang terkumpul sepanjang berbilang operasi.
Dalam contoh di atas, penambahan 0.7, 0.2 dan 0.1 menghasilkan nilai perantaraan yang sedikit berbeza bergantung pada susunan daripada operasi. Perbezaan kecil ini disebarkan melalui penambahan seterusnya, akhirnya membawa kepada keputusan akhir yang berbeza.
Untuk memahami konsep ini dengan lebih lanjut, mari kita pertimbangkan contoh daripada kertas mani David Goldberg "Apa Yang Setiap Ahli Sains Komputer Perlu Tahu tentang Aritmetik Titik Terapung":
(1e30 + -1e30) + 1 = 1, while 1e30 + (-1e30 + 1) = 0
Dalam kes ini, kurungan sangat mempengaruhi hasilnya. Menambah 1e30 dan -1e30 dalam kurungan menghasilkan nilai hampir sifar disebabkan pembundaran, yang kemudiannya ditambah kepada 1. Sebaliknya, menambah 1e30 dan hasil -1e30 1 menghasilkan nilai bukan sifar.
Oleh itu, apabila bekerja dengan aritmetik titik terapung, adalah penting untuk mengetahui potensi tidak berpersatuan dan berhati-hati apabila memanipulasi ungkapan yang melibatkan penambahan berulang atau operasi bersekutu lain.
Atas ialah kandungan terperinci Mengapa Penambahan Titik Terapung Tidak Sentiasa Mengikuti Undang-undang Bersekutu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!