Rumah >pembangunan bahagian belakang >C++ >Mengapa pengiraan terapung di C# tidak tepat?

Mengapa pengiraan terapung di C# tidak tepat?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-31 04:18:08720semak imbas

Why Are Floating-Point Calculations in C# Imprecise?

Memahami ketepatan titik terapung di C#

ketepatan aritmetik terapung-point yang melampaui aritmetik sering membawa kepada hasil yang tidak dijangka. Pertimbangkan coretan kod C# ini:

<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        float f1 = 0.09f * 100f;
        float f2 = 0.09f * 99.999999f;

        Console.WriteLine(f1 > f2); // Surprisingly prints "false"
    }
}</code>
output, "palsu," adalah tidak bertentangan, kerana kedua -dua pengiraan kelihatan menghasilkan 9.0. Percanggahan ini timbul dari batasan perwakilan terapung.

IEEE 754 Nombor point floating standard Gunakan bilangan bit terhingga untuk mewakili bahagian pecahan. Ini bermakna banyak nilai perpuluhan tidak dapat disimpan dengan tepat; mereka dianggarkan. Nilai

dan hasil pengiraan adalah penghampiran. Penghampiran ini, sementara sering tidak penting, boleh menyebabkan perbandingan yang tidak dijangka. 0.09f Oleh itu, secara langsung membandingkan nombor terapung untuk kesamaan (

) tidak boleh dipercayai. Sebaliknya, gunakan perbandingan berasaskan toleransi:

==

Pendekatan ini memeriksa jika perbezaan mutlak antara
<code class="language-csharp">Console.WriteLine(Math.Abs(f1 - f2) < 0.0001); // A more robust comparison</code>
dan

berada di bawah ambang yang telah ditetapkan (0.0001 dalam kes ini). Laraskan ambang berdasarkan ketepatan aplikasi anda yang diperlukan. f1 f2 Sebagai alternatif, menggunakan

(nombor terapung dua ketepatan) menawarkan ketepatan yang lebih tinggi daripada

(satu ketepatan), mengurangkan kemungkinan ketidaktepatan ini. Walau bagaimanapun, walaupun nilai double tertakluk kepada batasan yang sama, walaupun dengan margin kesilapan yang lebih kecil. Pertimbangan yang teliti terhadap keperluan ketepatan adalah penting untuk pengiraan titik terapung yang boleh dipercayai. float

Atas ialah kandungan terperinci Mengapa pengiraan terapung di C# tidak tepat?. 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