(Not: Burada ikili sayıları belirtmek için 'b' ekleyeceğim. Diğer tüm sayılar ondalık olarak verilir)
Bir şeyleri düşünmenin bir yolu bilimsel gösterim gibi bir şeydir. 6.022141 * 10 ^ 23 gibi bilimsel gösterimde ifade edilen sayıları görmeye alışkınız. Kayan nokta numaraları dahili olarak benzer bir format kullanılarak saklanır - mantis ve üs, ancak on yerine iki güç kullanılarak.
61.0 değeriniz mantis ve üslerle 1.90625 * 2 ^ 5 veya 1.11101b * 2 ^ 101b olarak yeniden yazılabilir. Bunu on ile çarpmak ve (ondalık noktasını taşımak) için şunları yapabiliriz:
(1.90625 * 2 ^ 5) * (1.25 * 2 ^ 3) = (2.3828125 * 2 ^ 8) = (1.19140625 * 2 ^ 9)
veya ikili mantis ve üslerle birlikte:
(1.11101b * 2 ^ 101b) * (1.01b * 2 ^ 11b) = (10.0110001b * 2 ^ 1000b) = (1.00110001b * 2 ^ 1001b)
Sayıları çarpmak için orada ne yaptığımıza dikkat edin. Mantisayı çoğalttık ve üsleri ekledik. Sonra, mantis ikiden fazla bittiğinden, üssü çarparak sonucu normalleştirdik. Aynen ondalık bilimsel gösterimde sayılar üzerinde bir işlem yaptıktan sonra üssü ayarladığımızda olduğu gibi. Her iki durumda da birlikte çalıştığımız değerler ikili olarak sonlu bir temsile sahipti ve bu nedenle temel çarpma ve toplama işlemleriyle elde edilen değerler de sonlu bir temsile sahip değerler üretti.
Şimdi, 61'i 10'a nasıl böldüğümüzü düşünün. 1.90625 ve 1.25 mantislerini bölerek başlayacağız. Ondalık olarak, bu 1.525, güzel bir kısa sayı verir. Ama bunu ikiliye dönüştürürsek bu nedir? Bunu her zamanki gibi yapacağız - tamsayı ondalık sayıları ikiliye dönüştürmek gibi, mümkün olduğunca ikinin en büyük gücünü çıkarmak, ancak ikisinin negatif güçlerini kullanacağız:
1.525-1 * 2 ^ 0 -> 1
0.525-1 * 2 ^ -1 -> 1
0,025 - 0 * 2 ^ -2 -> 0
0,025 - 0 * 2 ^ -3 -> 0
0,025 - 0 * 2 ^ -4 -> 0
0,025 - 0 * 2 ^ -5 -> 0
0,025-1 * 2 ^ -6 -> 1
0.009375 - 1 * 2 ^ -7 -> 1
0.0015625 - 0 * 2 ^ -8 -> 0
0.0015625 - 0 * 2 ^ -9 -> 0
0.0015625 - 1 * 2 ^ -10 -> 1
0.0005859375 - 1 * 2 ^ -11 -> 1
,00009765625 ...
Ah oh. Şimdi başımız belada. 1.90625 / 1.25 = 1.525, ikili olarak ifade edildiğinde tekrar eden bir kesir olduğu ortaya çıktı: 1.11101b / 1.01b = 1.10000110011 ... b Makinelerimiz bu mantis için sadece çok fazla bite sahipler ve böylece kesri yuvarlayacaklar ve belli bir noktanın ötesinde sıfır olduğunu varsayalım. 61'i 10'a böldüğünüzde gördüğünüz hata aşağıdakiler arasındaki farktır:
1.100001100110011001100110011001100110011 ... b * 2 ^ 10b
ve deyin:
1.100001100110011001100110b * 2 ^ 10b
Kayan nokta değerleri ile ilişkilendirdiğimiz hassasiyet kaybına yol açan mantis bu yuvarlamadır. Mantis tam olarak ifade edilebildiğinde bile (örneğin, sadece iki sayı eklerken), eğer mantis üs normalleştirildikten sonra sığmayacak kadar çok basamağa ihtiyaç duyarsa, yine de sayısal kayıplar elde edebiliriz.
Ondalık sayıları yönetilebilir bir boyuta yuvarladığımızda ve sadece ilk birkaç basamağını verdiğimizde bu tür şeyleri her zaman yapıyoruz. Sonucu ondalık olarak ifade ettiğimiz için doğal geliyor. Ancak, bir ondalık sayıyı yuvarlayıp daha sonra farklı bir tabana dönüştürürsek, kayan nokta yuvarlaması nedeniyle elde ettiğimiz ondalık sayılar kadar çirkin görünecektir.