Floating Point Numbers

Bu sene aldığım Bilgisayarın Temelleri dersinde öğrendiğim güzel konulardan birisi de kayan noktalı sayıların bilgisayarda nasıl saklandığıdır. Aslında çok basit bir olay olmasına rağmen gerçekten de bana ilginç geldi. Yavaş yavaş bilgisayarın en temeline indikçe insan daha fazla etkileniyor.

Floating Numbers

Kayan noktalı sayılar bilgisayarda single, double ve quad olmak üzere farklı duyarlıklarda saklanabiliyor. Ben önce single precision (tek duyarlıklı-32 bit) yöntemini göstermek istiyorum.

Öncelikle elimizdeki sayıyı 10'luk tabandan 2'lik tabana dönüştürüyoruz. Bunu lisede öğrendiğimiz taban aritmetiği ile kolayca yapabilirsiniz.

Örneğin elimizde 21,25 sayısı olsun. Bunu bildiğimiz taban aritmetiği ile 10101.01 ikilik sayısına çeviriyoruz.

Şimdi bu elimizdeki sayıyı bilimsel gösterime göre düzenlememiz lazım. Bunun için sayıyı 1.010101x2^4 gibi bir hale getiriyoruz. Burada yaptığımız işlem onluk tabanda yaptığımız bilimsel gösterimin tam olarak aynısı.

Not: Okuduğum birkaç yazıda; sayıları bu hale getirdiğimizde bütün sayıların 1.xxx gibi bir duruma geldiğini ve bunun da bit kazancı sağladığı yazıyordu.

Şimdi elimizdeki sayıyı tek duyarlıklı olarak 32 bitte saklama kuralı olan IEEE754'e göre aşağıdaki şekilde düzenleyelim. 64 bitte saklama olayı da bizim yaptığımıza çok benzese de arada bazı farklar vardır. Resimde S işaret bitini, E üssü M'de mantissa yani değeri göstermekte.

IEEE754

Resme göre 1 bit işaret, 8 bit üs ve 23 bit sayının değeri için kullanmamız gerekiyor.

1 bit işaret; sayımız pozitif olduğu için direk olarak 0 değerini alıyor. Eğer negatif olsa 1 değerini alacaktı.

8 bit üs; Buraya az önce bilimsel hale getirdiğimiz sayının (1.010101x2^4) üssüne 2^(w - 1) - 1 ekleyip oluşan değeri yazacağız. Bizim 32 bitte w değerimiz 8'dir. Eğer farklı bir bit alanında saklasaydık o zaman bu değere göre ekleme yapmamız gerekecekti. Biz şimdi elimizdeki sayının üssü olan 4 değerine 2^(8-1) den gelen değer olan 127 ekleyip oluşan 131 sayısını ikilik tabana çevirip 8 bitlik kısma yazıyoruz. 10000011

23 bit değer(mantissa); Bu kısma sayılar 1.010101 gibi bir durumda iken baştaki bir değerini atarak oluşan değeri yazıyoruz. Yani elimizdeki değere göre 010101 yazmamız gerekiyor. Kurala göre bu alan bize 23 bit sağladığı için geri kalan kısımları 23 bit olana kadar 0 ile dolduruyoruz. Sayımızın son durumu 01010100000000000000000 oluyor.

Şimdi elimizdeki değerleri birleştirelim:0 10000011 01010100000000000000000. Artık bilgisayarımız 21,25 sayısını 32 bit'te 01000001101010100000000000000000 olarak saklıyor.

Aslında olay temel olarak böyle olsa da işin içine girince çok fazla detay ile karşılaşıyorsunuz. Eğer bu konu sizinde ilginizi çektiyse veya ders/proje gibi gereklilikleriniz varsa aşağıya yazacağım kaynaklar ile araştırmanıza devam edebilirsiniz.

Buradan Devam: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

comments powered by Disqus