13 Mart 2010 Cumartesi

Kayan Noktalı Iki Sayının Toplamı(IEEE Floating Point)

IEEE Floating Point Standard
S(1 bit) E(8 bit) F(23 bit) single precision
S(1 bit) E(11 bit) F(52 bit) double precision
3.5 + 72.0625 Floating point sayıların Toplamını Bulunuz?
3.5 i 3 ve .5 i ayırıyoruz.
3--> 101 dir
.5-->
.5*2=1.0-->1 dir
Sayımız-->101.1 olur.Şimdi . yı mümkün olan en sola yanı soldaki 1 den öncesine yerleştiriyoruz.
1.011x2^2  bundaki en soldaki 1 i (1) şekilde yazıyoruz aşağıda.
32 bitle çalıştığımız için Exponenti bulmak için 2^y yanı 127+y=E olur.
Y miz burada 2 olduğundan 127+2=129
129-->100000001 dir
S de sayımız pozitif olduğundan 1 dir.

3.5--> 1 100000001 (1)011 0000 0000 0000 0000 0000
Buna a diyelim a= 1 100000001 (1)011 0000 0000 0000 0000 0000
Şimdi 72.0625 i bu şekilde bulalaım.
72-->1001000 dir
.0625-->
.0625*2=0.125-->0 bu sıfır . nın solundakidir.Yanı 2 ile çarpıp noktanın solundakini ?okun sağına yazıyoruz ki onları kullanacaz.
0.125*2=0.25-->0
0.25*2=0.5-->0
0.5*2=1.0-->1 işlem . dan sonra sayı bitene kadar yada tekrarlanan kadar devam eder bu şekilde.Şu an 1.0 olduğundan sonlandı işlemimiz.
.0625-->0001 dir
72-->1001000
Sayımız : 72.0625 birleştirecek olursak
1001000.0001
1.0010000001x2^6 olur.
32 bit oludğundan 127 sabittir.
Yukarda y ile topladığımız gibi exponenti bulmak içinde
127+6=133
133-->10000111 exponentimiz.
S E F leri yazalım.
Pozitif olduğundan s=1 dir E=10000111 F=1.001 0000 001 bunu yazıyoruz.23 e tamamalamak içinde bu sayıdan sonra 0 geliyor.
Buna b=1 10000101 (1)001 0000 0010 0000 0000 0000
a+b yi bulalaım yani 3.5+72.0625
a=1 100000001 (1)011 0000 0000 0000 0000 0000
b=1 10000011 (1)001 0000 0010 0000 0000 0000
E ler eşit olmadığından toplayamayız. 10000101 ve 10000011 eşitlemeliyiz.
Exponente eklendiği kadar soldaki yanı F kısmı da sağa kaydırılır.Buna right shift denir
A nın ki 129 du ve b ninkide 133 o zaman a ya 4 eklersek eşitlenir exponentler.
4 ekleyelim anınkine
b=1 10000011 (1)001 0000 0010 0000 0000 0000
a=1 10000011 (1)011 0000 0000 0000 0000 0000
Dikkat exponente 4 kelndiği için F kısmı yanı (1)001 0000 0010 0000 0000 0000 4 kaydırılmalı.Kaydıracak olursak
a=1 100000011 (0)000 0101 1000 0000 0000 0000 4 tane kaydırdık.Önce () içinde 1 vardı şimdi 0 geldi.() den başlayıp kaydırıyoruz.
a=1 10000011 (0)000 0101 1000 0000 0000 0000
b=1 10000011 (1)001 0000 0010 0000 0000 0000
+________________________________________
1 100000011 (1)001 0101 1010 0000 0000 0000

1 yorum:

  1. 3.5 = 01000000011000000000000000000000b
    75.0625 = 01000010100100000010000000000000b

    Zaten sayı eğer pozitifse MSB'nin 0 olması gerekir 1 değil

    YanıtlaSil