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

Mengapa pengiraan terapung di C# tidak tepat?

Mary-Kate Olsen
Lepaskan: 2025-01-31 04:18:08
asal
752 orang telah melayarinya

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:

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"
    }
}
Salin selepas log masuk
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
Console.WriteLine(Math.Abs(f1 - f2) < 0.0001); // A more robust comparison
Salin selepas log masuk
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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan