Published on

Floating Point Gösterimi Nedir? IEEE 754 Standartları[Çözümlü Örneklerle]

Authors
  • avatar
    Name
    Alperen Önal
    Twitter

Floating Point (Kayan Noktalı) gösterimi, bilgisayarda çok küçük ya da çok büyük ondalık sayıları verimli ve efektif şekilde depolamak, temsil etmek ve işlem yapmak için kullanılan bir yöntemdir.

Kullanmasaydık ne olurdu?:

  • Underflow, gerekli hassasiyet sağlanamazdı.
  • Overflow, bellekte yeterli alan olmadığında taşmalar meydana gelirdi.
  • Matematiksel işlemler (çarpma, bölme vs.) çok yavaş ve karmaşık olurdu.
  • Bellek ve işlemci kaynakları aşırı tüketilirdi.
  • Bilimsel ve mühendislik işlemlerini gerçekleştirmek imkansız olurdu.

gibi sorunlarla karşılaşabilirdik.

Üstel Gösterim(Scientific notation, exponential notation)

±F×B±E\pm F \times B^{\pm E}
  • F:Fraction (Kesir, Mantissa)
  • E:Exponent (Üs)
  • B: Base (Taban)

Bellekte ±\pm, F ve E tutulur. Taban B'nin bellekte tutulmasına gerek yoktur. Çünkü tüm sayılar için aynıdır. Örneğin 2lik taban için base 2'dir. 10luk taban için base 10'dur. Bilgisayarlar da 2'lik tabanda işlem yaptığı için bu base değerini 2 olarak kabul ederiz ve saklamayız.

Örnek:

135 000 000 000 = +0.135×1012+0.135 \times 10^{12}

Bu örnekte + (sign), 135 (fraction), 12 (exponent) bellekte tutulacaktır.


Normalizasyon (Normalize Sayı)

Bir önceki örneğe bakacak olursak 135 000 000 000 sayısının çeşitli üstel gösterimleri olabilir.

Örneğin:

  • 135 000 000 000 = +0.135×1012+0.135 \times 10^{12} = +1.35×1011+1.35 \times 10^{11} = +13.5×1010+13.5 \times 10^{10}

Bu kafa karışıklığını ortadan kaldırmak için normalize gösterim yöntemini kullanırız. Genellikle bu yöntem; noktanın her zaman sıfırdan farklı en yüksek anlamlı sayının solunda olacağı şekilde kabul edilir ve E(exponent) ona göre ayarlanır.

Örneğin:

  • 23.90 normalizasyon -> +0.2390×102+0.2390 \times 10^{2}
  • Yani, 23.90 sayısı bellekte + (sign), 2390 (fraction), 2 (exponent) şeklinde tutulacaktır.
  • ⚠️Unutmayın başka normalizasyon yöntemleri de vardır. Örneğin, buradaki noktanın konumu kullanılan normalizasyon yöntemine göre değişebilir.

Biased Exponent Nedir?

Üs değerleri de işaretli sayılardır. Üs değerlerini işaretsiz olarak saklayarak, donanımlarda üs işlemlerini daha basit ve hızlı hale getirmek için biased exponent yöntemini kullanırız.

gercekus=SaklanandegerBiasgercek us = Saklanan deger - Bias

Yani üs değerlerini doğrudan bellekte saklamak yerine önce bias değerinden çıkartıyoruz. Bu da, üssün işaretinin saklanmasını gereksiz kılar ve aritmetik işlemlerde(karşılaştırmalarda) kolaylık sağlar.


IEE 754 Standartı

IEEE 754 Standardı, bilgisayarların ondalık (float) ve kesli sayı sistemlerini binary formatta temsil etmesi, saklaması ve işlemesi için kullanılan uluslararası bir standarttır. Bu standart, özellikle kayan noktalı sayıların (floating point numbers) nasıl işleneceğini tanımlar. Günümüzde bir çok sistem tarafından kullanılmaktadır.

Standardın Çıkış Nedenleri:
  • Kesirli sayıları ve çok büyük ya da çok küçük sayıları temsil etmeyi kolaylaştırmak.
  • Sayılar üzerinde işlem yaparken doğruluk, hassasiyet ve performansı korumak.
  • Farklı bilgisayar donanımları arasında standardı sağlayarak farklı sistemlerin aynı şekilde çalışmasını kolaylaştırmak.
IEEE 754 Single (32 bit) Formatı: I˙s¸aret (S)U¨s (E)Kesir (F)1 bit8 bit23 bit\begin{array}{|c|c|c|} \hline \textbf{İşaret (S)} & \textbf{Üs (E)} & \textbf{Kesir (F)} \\ \hline 1\ \text{bit} & 8\ \text{bit} & 23\ \text{bit} \\ \hline \end{array} IEEE 754 Double (64 bit) Formatı: I˙s¸aret (S)U¨s (E)Kesir (F)1 bit11 bit52 bit\begin{array}{|c|c|c|} \hline \textbf{İşaret (S)} & \textbf{Üs (E)} & \textbf{Kesir (F)} \\ \hline 1\ \text{bit} & 11\ \text{bit} & 52\ \text{bit} \\ \hline \end{array}

E'deki bit sayısı "k" olmak üzere, Bias değeri = 2k112^{k-1}-1

IEEE 754 Normalizasyonu :
  • Nokta, her zaman sıfırdan farklı en yüksek anlamlı sayının sağındadır.
  • Binary tabanda çalışıldığı için sıfırdan farklı sayı her zaman 1 olacaktır.
  • Noktanın solunda her zaman 1 olacağı bilindiği için buradaki 1 bellekte tutulmayacaktır. Bu 1'e hidden one denir.
Örnek Soru 1: Onluk tabandaki -45.125 değerini IEEE 754 Single formatında saklayın.
  1. Decimal to Binary

    • (45)10=(101101)2(45)_{10} = (101101)_{2}

    • (0.125)10=(001)2(0.125)_{10} = (001)_{2}

    • (45.125)10=(101101.001)2(45.125)_{10} = (101101.001)_{2}

  2. IEEE 754 Normalizasyonu

    • 1.01101001×251.01101001 \times 2^5
  3. Biased Exponent'in Bias ile Hesaplanması

    • IEEE 754 Single için, Biasdegeri=2811=127Bias degeri = 2^{8 - 1} - 1 = 127
    • BiasedExponent=5+127=132Biased Exponent = 5 + 127 = 132
    • (132)10=(10000100)2(132)_{10} = (10000100)_{2} -> 8 bitlik exponent
  4. IEEE 754 Formatını Birleştirme

    • Sign Bit(S): 1 (negatif olduğu için)
    • Biased Exponent(E): 10000100
    • Fraction(F): 01101001000000000000000 (23-bit olacak şekilde sıfırlarla doldurulur.)
  5. Sonuç:

    • 1 10000100 01101001000000000000000

Örnek Soru 2: IEEE 754 Single formatında "0 10000010 10100000000000000000000" temsil edilen decimal sayıyı bulun.

  1. IEEE 754 Formatını Ayrıştırma

    • Sign Bit(S): + (0 olduğu için)
    • Biased Exponent(E): (10000010)2=(128)10(10000010)_{2} = (128)_{10}
    • Fraction(F): 10100000000000000000000
  2. Gerçek Exponent(Unbiased Exponent)'i Bias ile Bulma

    • IEEE 754 Single için, Biasdegeri=2811=127Bias degeri = 2^{8 - 1} - 1 = 127
    • Gercekexponent=130127=+3Gercek exponent = 130 - 127 = +3
  3. Değerleri Bir Araya Getirme

    • +1.101×2+3+1.101 \times 2^{+3}
  4. Binary to Decimal -1.101=1×20+1×21+0×22+1×23=1+0.5+0.125=1.6261.101 = 1 \times 2^{0} + 1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3} = 1 + 0.5 + 0.125 = 1.626 -(1.101)2=(1.626)10(1.101)_{2} = (1.626)_{10}

  5. Exponent ile Decimal Sayıyı Çarp

    • 1.626×2+3=13.01.626 \times 2^{+3} = 13.0
  6. Sonuç

    • 13.0

Not:

  • Eğer bias sayısı eklenmişse (IEEE 754'de exponent'in saklanacağı Format) -> Biased Exponent

  • Eğer bias sayısı eklenmemişse -> Unbiased Exponent

olarak adlandırılır.


Bir sonraki yazıda görüşmek üzere.