Point matematik kırık yüzer?
0.1 0.2 == 0.3
-> false
0.1 0.2
-> 0.30000000000000004
Bu neden olur bir fikriniz var mı?
CEVAP
İkili floating point matematik böyle bir şey. Çoğu programlama dilinde, IEEE 754 standard dayanmaktadır. JavaScript Java double
aynı olduğu için 64-bit kayan nokta gösterimini kullanır. En can alıcı sorunu olan rakamları temsil bu formatta bir tam sayı kere iki güç; rasyonel sayılar (gibi 0.1
olan 1/10
) olan payda değil bir iki güç olamaz tam olarak temsil etti.
Standart 0.1
binary64
biçim, temsili tam olarak yazılabilir
0.1000000000000000055511151231257827021181583404541015625
ondalık ya- C99 hexfloat notation 10*.
Buna karşılık, rasyonel sayı 1/10
, 0.1
, tam olarak yazılabilir
- Ondalık
0.1
ya - C99 bir analog
0x1.99999999999999...p-4
...
9 bitmeyen bir dizi gösterir gösterimde hexfloat,.
Programda sabitler 0.2
0.3
de gerçek değerlerine yakın olacak. Olur yakın double
0.2
daha rasyonel sayı 0.2
ama en yakın double
0.3
birden küçük olan rasyonel sayı 0.3
. 0.1
0.2
toplamı kadar 26* *rasyonel sayısından daha büyük ve sürekli bu belirtmiş olduğun kodunuzu rüzgarlar.
Kayan noktalı aritmetik konularda oldukça kapsamlı bir tedavi What Every Computer Scientist Should Know About Floating-Point Arithmetic. Daha kolay için özet bir açıklama için floating-point-gui.de bkz.
Neden'in matematik Python.() ceil...
Matematik optimizasyon C#...
Bu nasıl bir dizi kontrol etmek için y...
Nasıl kırık WPF Veri bağlama algılamak...
Yok Matematik gibi iki değer alır SQL ...