Bunun işe yaraması hiç de önemsiz değil! Söz konusu sayıların büyüklüğü yeterince küçükse, IEEE kayan nokta gösteriminin bir özelliğidir, ancak int (kat (2.3)) 1 olabileceği yerlerde farklı gösterimler mümkündür.
Bu yazı neden bu aralıkta çalıştığını açıklıyor .
Bir çiftte, 32bit tam sayıları sorunsuz olarak temsil edebilirsiniz. Orada olamaz herhangi yuvarlama sorunları olabilir. Daha kesin olarak, çiftler, 2 53 ve -2 53 arasındaki ve arasındaki tüm tam sayıları temsil edebilir .
Kısa açıklama : Bir çift 53 adede kadar ikili rakam saklayabilir. Daha fazlasına ihtiyacınız olduğunda, sayı sağda sıfırlarla doldurulur.
53 adetin dolgu olmadan saklanabilecek en büyük sayı olduğu anlaşılmaktadır. Doğal olarak, daha az hane gerektiren tüm (tamsayı) sayılar doğru bir şekilde saklanabilir.
111'e (atlanmış) 111 (53 olanlar) eklenmesi 100 ... 000, (53 sıfır) verir. Bildiğimiz gibi, en sağdaki sıfır dolguyu yapan 53 basamak saklayabiliriz.
2 53 buradan geliyor.
Daha fazla detay: IEEE-754 kayan noktasının nasıl çalıştığını düşünmemiz gerekir.
1 bit 11 / 8 52 / 23 # bits double/single precision
[ sign | exponent | mantissa ]
Daha sonra sayı aşağıdaki gibi hesaplanır (burada alakasız olan özel durumlar hariç):
-1 işareti × 1.mantissa × 2 üs - önyargı
burada yanlılık = 2 üs - 1 - 1 , yani çift / tek kesinlik için sırasıyla 1023 ve 127.
2 X ile çarpmanın tüm X bitlerini sola kaydırdığını bilerek, herhangi bir tamsayının mantis içinde ondalık noktasının sağına kadar biten tüm bitlere sahip olması gerektiğini görmek kolaydır.
Sıfır dışında herhangi bir tam sayı ikili olarak aşağıdaki forma sahiptir:
1x ... x burada x -es, MSB'nin sağındaki bitleri temsil eder (en önemli bit).
Sıfırı hariç tuttuğumuz için, her zaman bir MSB olacaktır - bu yüzden depolanmaz. Tamsayıyı saklamak için, yukarıda belirtilen forma getirmeliyiz: -1 işaretiTamsayıyı × 1.mantissa × 2 üs - sapma .
Bu, MSB'nin soluna doğru yalnızca MSB olana kadar bitleri ondalık noktaya kaydırmakla aynı şeydir. Ondalık noktasının sağındaki tüm bitler mantis içinde saklanır.
Bundan, MSB dışında en fazla 52 ikili basamak depolayabildiğimizi görebiliriz.
Tüm bitlerin açıkça saklandığı en yüksek sayının
111(omitted)111. that's 53 ones (52 + implicit 1) in the case of doubles.
Bunun için üssü, ondalık nokta 52 basamak kaydırılacak şekilde ayarlamamız gerekir. Üst üssü bir arttırırsak, ondalık noktadan sonraki sağdaki rakamı bilemeyiz.
111(omitted)111x.
Kural olarak, 0'dır. Tüm mantisin sıfıra ayarlanması, aşağıdaki sayıyı alırız:
100(omitted)00x. = 100(omitted)000.
Bu 1'i takiben 53 sıfır, 52'si depolanmış ve 1'i üs nedeniyle eklenmiştir.
Aralarında tüm tamsayıları doğru bir şekilde temsil edebileceğimiz (hem negatif hem de pozitif) sınırı işaret eden 2 53'ü temsil eder. Birini 2 53'e eklemek isteseydik , örtük sıfırı (ile gösterilir x
) birine ayarlamamız gerekirdi , ama bu imkansız.
math.floor
v2.6'da bir kayan nokta döndürür , ancak v3'te bir tam sayı döndürür . Bu noktada (OP'den yaklaşık altı yıl sonra), bu sorun nadiren ortaya çıkabilir.