Rumah >pembangunan bahagian belakang >C++ >Kenapa 0.09F * 100F seolah -olah tidak melebihi 0.09F * 99.9999999F dalam 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.
(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
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!