Rumah >pembangunan bahagian belakang >C++ >Kenapa 0.09F * 100F seolah -olah tidak melebihi 0.09F * 99.9999999F dalam C#?

Kenapa 0.09F * 100F seolah -olah tidak melebihi 0.09F * 99.9999999F dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-31 04:21:11516semak imbas

Why Does 0.09f * 100f Seemingly Not Exceed 0.09f * 99.999999f in C#?

c# aritmetik terapung-titik: mengapa perkara ketepatan

nombor terapung di C#, sementara biasa digunakan, mempunyai batasan yang dapat menghasilkan hasil yang tidak dijangka. Mari kita periksa kes yang menggambarkan ketepatan ini.

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 outputs "false"
    }
}</code>
Program ini mengejutkan output "palsu," walaupun

(0.09 f1 100) harus secara logiknya lebih besar daripada (0.09 f2 99.999999). Ini disebabkan oleh keterbatasan perwakilan terapung.

jenis titik terapung, seperti

(32 bit dalam C#), mempunyai ketepatan terhad. Mereka hanya boleh mewakili bilangan digit perpuluhan yang terhingga dengan tepat (kira -kira 7 untuk float). Pengiraan yang melibatkan nombor terapung memperkenalkan kesilapan bulat, yang terkumpul dan boleh membawa kepada percanggahan seperti yang diperhatikan. Dalam hal ini, kesilapan pembulatan semasa pengiraan dan penyimpanan float dan f1 menyebabkan mereka dianggap sama, atau bahkan untuk f2 menjadi sedikit lebih kecil daripada f1 kerana kesilapan terkumpul ini. f2

Untuk pemahaman yang komprehensif tentang ketepatan terapung dan implikasinya, rujuk sumber definitif: "Apa yang setiap saintis komputer harus tahu tentang aritmetik terapung."

Atas ialah kandungan terperinci Kenapa 0.09F * 100F seolah -olah tidak melebihi 0.09F * 99.9999999F dalam C#?. 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