Memahami Ketidaktepatan dalam .NET Double Precision Multiplication
Istilah "ketepatan berganda" dalam .NET mungkin mengelirukan. Aritmetik titik terapung berketepatan dua tidak selalunya tepat dengan sempurna. Mari kita periksa contoh biasa:
<code>double i = 10 * 0.69;</code>
Daripada 6.9 yang dijangkakan, hasilnya selalunya 6.8999999999999995. Ketaktepatan ini timbul daripada cara nombor titik terapung diwakili dan disimpan.
Beregu, seperti jenis titik terapung lain, menganggarkan nombor nyata menggunakan format binari tertentu. Banyak nilai perpuluhan, seperti 0.69 dan 1/3, tidak boleh diwakili dengan tepat dalam format perduaan ini kerana batasannya yang wujud.
Pengkompil biasanya mengoptimumkan pendaraban pada masa penyusunan, menyimpan hasilnya sebagai pemalar. Walau bagaimanapun, memandangkan 6.9 tidak mempunyai perwakilan binari yang tepat, pemalar yang disimpan ialah anggaran.
Untuk mengurangkan perkara ini, pertimbangkan untuk menggunakan jenis decimal
, yang menawarkan ketepatan yang lebih tinggi pada kos prestasi yang dikurangkan. Untuk aplikasi yang memerlukan ketepatan yang sangat tinggi, perpustakaan yang menyediakan sokongan nombor rasional, seperti BigRational
, menawarkan pendekatan alternatif.
Atas ialah kandungan terperinci Mengapa Pendaraban Berganda dalam .NET Tidak Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!