Rumah >pembangunan bahagian belakang >C++ >Adakah Pendaraban Berganda Dipecahkan dalam .NET?
Penjelasan terperinci tentang masalah ketepatan pendaraban ketepatan berganda dalam .NET
Dalam C#, hasil ungkapan double i = 10 * 0.69;
ialah i
diberikan nilai 6.89999999999999995 dan bukannya 6.9 yang dijangkakan. Ini menimbulkan persoalan: Adakah terdapat sesuatu yang salah dengan pendaraban ketepatan berganda dalam .NET?
Perwakilan binari dan operasi titik terapung
Untuk memahami tingkah laku ini, seseorang mesti mempunyai pemahaman yang mendalam tentang kehalusan perwakilan binari dan aritmetik titik terapung. Format titik terapung lebih kurang mewakili nombor nyata sebagai nilai perduaan terhingga, yang boleh mengakibatkan pengehadan ketepatan.
0.69 yang kelihatan mudah tidak boleh dinyatakan dengan tepat dalam binari. Ia memerlukan jujukan gelung tak terhingga bagi nombor binari. Perwakilan binari yang disimpan dalam double
jenis data ialah anggaran 0.69.
Pengoptimuman pengkompil dan pemalar tersimpan
Dalam coretan kod yang disediakan, pengkompil mengoptimumkan ungkapan dengan melakukan pendaraban dan menyimpan hasilnya sebagai pemalar dalam boleh laku. Ia melakukan ini kerana nilai diketahui pada masa penyusunan. Nilai yang disimpan ialah anggaran titik terapung 6.9, yang lebih kecil sedikit daripada nilai sebenar.
Penyelesaian dan jenis data alternatif
Untuk menyelesaikan masalah ini dan mendapatkan hasil yang lebih tepat, anda boleh menggunakan decimal
jenis data, yang direka bentuk untuk mewakili nilai perpuluhan tidak berulang dengan ketepatan yang lebih tinggi. Ungkapan decimal i = 10m * 0.69m;
akan menghasilkan 6.9m.
Atas ialah kandungan terperinci Adakah Pendaraban Berganda Dipecahkan dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!