IEEE-754 ve Ondalıklı Sayılar

Çağın Kılınç
Bir Başka Dünya
4 min readAug 11, 2022

--

Daha önce yazdığım Fast Inverse Square Root yazımda yeterince değinemediğim, sayısal analiz, mantık devreleri ve kısaca bilgisayar bilimlerinde çok önemli yer tutan virgüllü ondalık sayıların gösterimlerinin arasında en önemli olan IEEE-754 gösterimi hakkında bir yazı yazmak ve bu gösterimi bir örnekle canlandırmak istedim.

Çok fazla detaya girmeden yapılan işlemi basitçe anlattığım, özel durumları (Üssün 0 olması durumu, +- sonsuz durumu vb.) şimdilik başka bir yazıya sakladığım yazıma başlamadan, maalesef bizzat öğrencisi olamadığım ancak youtube ve çeşitli seminerden takip ettiğim Oğuz Ergin hocama teşekkür etmek istiyorum. Bu yazının içeriğini diğer birçok kaynak gibi destekleyen, youtube kanalındaki açık olarak paylaştığı Mantık Devresi Tasarımı derslerinin oldukça fazla etkisi olduğunu söylemeden geçmek istemiyorum.

Photo by Compare Fibre on Unsplash

Bilgisayar bilimleri, pek tabii ki film ve dizilerdeki kadar aksiyonlu ve hızlı akan 0 ve 1 leri izlemek ve rastgele klavye düzenlerini tuşlamaktan ibaret bir bilim değil. Ancak 0 ve 1'ler hala tüm kişisel ve süper bilgisayarların (Kuantum bilgisayarlarında kısmen hariç) temel işleyişinde, mantık devrelerinin oluşturulmasında, ikili komut dizilerinin oluşturulmasında… kullanılan tek sayısal taban.

Photo by Mika Baumeister on Unsplash

Bilgisayar Bilimleri’nin en temel ve önemli problemlerinden olan “Ondalıklı Sayıların(floating point) İkili (Binary) Sistemde Gösterimi” ise bu ikili taban kullanıldığında yaşanan hassaslık ve tutarlılık sorunlarını gidermek amacıyla, 1985 yılında IEEE’deki sayısal analiz uzmanları tarafından geliştirilen IEEE 754 hala günümüzde de geçerli en önemli standarttır.

Bu standartlaştırmaya gidilmesinin, hassaslık ve tutarlılığın sağlanmasının en önemli sebebi, geliştirilen donanım ve programların her durumda aynı işleyişe sahip olması isteğinden gelir. Zamanında bu işleyiş sağlanmadığından devasa firmalarda felaket etkisi yaratacak bazı sonuçlar da yaşanmıştır (bkz: Intel Pentium FDIV bug)

Peki IEEE 754 Nasıl Çalışıyor?

Gösterimi anlamanın en kolay ve en hızlı yolu bir örnekle açıklamak olacağından, ondalık sistemden ikili sisteme geçişi bildiğiniz varsayımıyla, kendi oluşturduğum örnek üzerinden anlatmak istiyorum.

Öncelikle ondalıklı bir sayı belirleyelim; sayımız 4.5 olsun.

Bu sayıyı ikili tabana çevirdiğimizde 100,1 değerini elde ediyoruz. (Nasıl?) Ardından bu virgülü, solunda 0'dan farklı yalnızca bir adet sayı kalana kadar kaydırıyoruz. (Floating işlemi)

  • 100,1
  • 10,01 x 2¹
  • 1,001 x 2²

Son hali 1,001 x 2² olan sayımızın ilk hanesindeki 1'in herhangi bir anlamı olmadığından saklama ihtiyacımız yok. (bilimsel gösterim gereği)

Sayımızın anlamlı kısmı: 001

Sayımızın üstel kısmı: 2²

olarak belirledik şimdi bunu IEEE 754 standardında ikili sistemde gösterelim.(Örneğimizde 32 bitlik Tek Duyarlı IEEE 754 standardı kullanılmıştır, diğer standartlar için tıklayın)

1,001 x 2³ sayısının IEEE 754 gösterimi

Öncelikle işaret terimi ile başlayalım,

seçtiğimiz sayı pozitifse 0, negatifse 1 değerini alır.

Üstel kısım için 8 bitlik bir alan ayrılmış, 2'ye tümleyen yerine alternatif bir yol tercih edilip, 8 bitlik alanda gösterilebilecek en küçük ve en büyük sayı aralığı 128'den -127'ye kadar belirlenmiş (ikili tabanda düşünüldüğünde belirlenen 8 bitlik alan 2⁷ = 128, -2⁷ = -128 ancak 0 değeri de olduğundan -127 olarak sayılır)

Bu sebeple 2² değerini gösterebilmemiz için başlangıç değeri -127 olan üsse 139 eklemeliyiz bu sebeple 8 bitlik alanda

  • > 00000000
  • >10000000 -> 128–127 = 1 -> 2¹
  • >10000001 -> 129–127 = 2 -> 2²

işlemi yapılır.

İşlemler sonucu işaret ve üstel kısım

Anlamlı (Ondalık) kısmın ifade edilmesi için ise 23'üncü bitin ardından gelen 22–0 dahil aralığındaki bitleri kullanacağız, bu da demek oluyor ki eğer virgülden sonra 24. hanesi olan bir sayıyı saklamak istersek, 32 bitlik bu standardı kullanamayız.(bkz: 64 bitlik IEEE 754).

Ardından 22. bit ile başlayarak anlamlı kısmımızı soldan sağa olacak bir biçimde yazıyoruz.

Ve artık sayımızı IEEE 754 formatında yukarıdaki gibi gösterdik.

--

--