Aritmetik taşma

Mantık devrelerinde taşma, devrenin sağladığı bit alanının işlem sonucunda ortaya çıkan verinin elde bulunan saklama alanına sığmaması durumunda olur.

Üstten taşma

Kayan Nokta aritmetiğinde taşma iki türlü meydana gelebilir. Bu türler overflow ve underflow olarak adlandırılır.
Overflow: Pozitif bir üstün üst (exponent) alanına sığmayacak kadar büyük hale gelmesi durumuna verilen isimdir.
Underflow: Negatif bir üstün üst (exponent) alanına sığmayacak kadar büyük bir hale gelmesi durumuna verilen isimdir.

Kırpma (Truncation) Hataları

Rahatsız edici başka bir problemse, 1 baytlık kayan nokta sisteminde örnek olarak 2 5⁄8 ‘in saklanması istendiğinde ortaya bir sorun çıkacaktır. İlk önce 2 5⁄8 ikilik sistemde yazıır; 10,101. Fakat bu ondalık(mantissa) alanına kopyalanırsa kullanılabilir alanın dışına taşmak gerekir. Bu durumda en sağdaki en anlamsız bit (least significant bit) dışarıya atılır ve kaybolur. Bu 1⁄8’lik bir büyüklüğün kaybolması anlamına gelir.

Bu sorun görmezden gelinip üst alanı ve işaret biti doldurulursa elde edilen sonuç 01101010 olur yani 2 5⁄8 yerine 2 1⁄2 elde edilmiş olur. Bu duruma Kırpma (truncation) hatası adı verilir ve sonucunda ondalık alanının yeteri kadar geniş olmamasından kaynaklı olarak değerin bir kısmı kaybolur.
Bu durumda 2 1⁄2 + 1⁄8 + 1⁄8 sonucu bulunmak istendiğinde değerler yazıldığı sırayla toplanırsa 2 1⁄2 + 1⁄8 sonucu olarak 2 5⁄8 yani ikilik sistemde 10.101 elde edilir. Daha önceden de görüldüğü gibi bu değer doğru olarak tutulamaz. Eklenilen 1⁄8 değeri hiç eklenmemiş gibi ortadan kaybolur. Sonuç olarak gelen 2 1⁄2’ye son 1⁄8 de eklediğinde yine aynı sorundan dolayı son sonuç olarak 2 1⁄2 elde edilir. Fakat değerler tersten sıralanıp toplanırsa bu sorun çözülebilir. 1⁄8+ 1⁄8 = 1⁄4, yani ikilik sistemde .01 sonucu elde edilir. İlk aşamanın sonucu bir baytta 00111000 olarak isabetli şekilde saklanır. Bu değer 2 1⁄2 ile toplanırsa 2 3⁄4 sonucu elde edilir. Yani bir baytta isabetli olarak 01101011 bu sefer doğru olan sonuç tutulabilir.
Özetlemek gerekirse kayan nokta biçiminde nümerik değerler eklenirken kullanılan sıralama sonucun doğru olması açısından önemlidir. Bu biçimde çok büyük bir sayıya çok küçük bir sayı eklenirse küçük sayı kırpılmış (truncated) olabilir. Sonuç olarak değerleri birbirine eklemek için genel kural küçük olan değerler büyük değerin yanında kaybolmayacakları umularak bir araya toplanır ve kalan büyük değerle son olarak toplama işlemi yapılır.
Bu tür sorunların önemi daha uzun ondalık alanı kullanılarak azaltılabilir. Aslında bugün birçok bilgisayar burada gösterilen 8 bit yerine 32 bit veya daha fazlasını kullanır. Bu aynı zamanda daha uzun bir üst alanını kullanılabilir hale getirir. Bu uzunluktaki formatlarda bile halen daha isabetli sonuçlara ihtiyaç duyulabilir.
Günümüzde ticari yazılım paketi tasarımcıları bu konuda eğitimsiz kullanıcıları bu durumdan korumak adına iyi işler ortaya koymaktadırlar. Standart bir hesap tablosu (spreadsheet) sisteminde 10¹⁶ ve daha fazla farklar olmayan sayılarda doğru cevaplar alınması beklenir. Sonuç olarak, 10.000.000.000.000.000’e 1 ekleme ihtiyacı duyulursa 10.000.000.000.000.001 yerine 10.000.000.000.000.000 cevabı alınabilir.
Bu tür problemler genellikle basit kullanıcılar için büyük sorunlar teşkil etmez fakat hassasiyet uçak ve gemi sistemleri, uzay araştırma araçları gibi sistemler için son derece önemli olabilir.
Başka bir kırpma hatası sebebi ise gündelik hayatta kullanılan on tabanında her zaman ortaya çıkan bir problemdir: örneğin 1⁄3' ün desimal biçimde gösterilmesinde karşılaşılan ondalığın sonsuza gitmesi (nonterminating expansions) problemi. Bazı değerler burada olduğu gibi kaç bit kullanılırsa kullanılsın tam olarak ifade edilemez. On tabanı ve ikilik (binary) gösterim arasındaki fark ikilik gösterimde daha fazla sonsuza giden değer vardır. Örneğin 0,1 ikilik sistemde tam olarak ifade edilemez. Buna sorun teşkil eden bir örnek vermek gerekirse dolar ve sentlerle çalışan, bu durumdan habersiz bir insanın karşılaşacağı birçok sorun vardır. Özellikle dolar genel birim olarak kullanılıyorsa “dime” isabetli olarak saklanamaz. Bu durumda genel birim olarak peni kullanılmasıyla bütün değerlerin tam sayı olması ve daha isabetli sonuçlar elde edilmesi sağlanabilir.