Rumah >pembangunan bahagian belakang >C++ >Adakah Pendaraban Berganda Dipecahkan dalam .NET?

Adakah Pendaraban Berganda Dipecahkan dalam .NET?

Patricia Arquette
Patricia Arquetteasal
2025-01-10 09:52:41739semak imbas

Is Double Multiplication Broken in .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!

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