Bilgisayar Mühendisliğine Giriş Yrd. Doç. Dr. Hüseyin POLAT
Bilgisayar Mühendisliğine Giriş Konular Gerçek (Kesirli) Sayılar
Gerçek (Kesirli) Sayılar Aritmetik işlemler sadece tam sayılar üzerinde yapılmaz. Kesirli sayılar üzerinde işlem yapılabilmesi için bunların bilgisayarlara tanıtılması gerekir. Sayılar bilgisayarda sabit uzunluktaki saklayıcı(register) denilen donanımlarda tutulur. Bu durumda kesirli kısmı ayıran nokta, ya her zaman sabit bir yere konacak (sabit noktalı gösterim -fixed point representation) ya da kayan nokta gösterimi - floating point representation kullanılacaktır. Bilgisayar matematiğinin kâğıt-kalem matematiğinden tümüyle farklı olduğu unutulmamalıdır.
Sabit Noktalı Gösterim -Fixed Point Representation : Sabit noktalı gösterimde n bitlik alanda noktanın yeri belirlenmiş ve x bit anlamlı kısım için, geri kalan (n-x) bit ise noktadan sonraki kısım için ayrılmıştır.
Sabit Noktalı Gösterim - Fixed Point Representation Bu durumda 8 bitin 4 biti sayının tam kısmını, kalan 4 biti noktadan sonraki kısmını ifade ederse 1011.0011, 1110.1001, 1111.1111 şeklindeki sayılar gösterilebilir.
Sabit Noktalı Gösterim - Fixed Point Representation Sabit bir bit pozisyonuna nokta konulması bazı sınırlamalar getirmektedir. Sabit noktalı sayı formatı, Çalışma hızını artırır. Donanım maliyetlerini önemli ölçüde azaltır. Fakat, nümerik hassasiyette önemli kayıplara sebep olmaktadır. Ancak kısıtlı bellek ve işlemci gücüne sahip bazı gömülü (embedded) sistemlerde sabit noktalı sayılar tercih edilir.
Sabit Noktalı Gösterim -Fixed Point için işlemler: xx.xxx gibi bir kesirli sayının fixed point gösterim basamakları; 1. Noktadan önceki kısım tam sayı binary olarak yazılır 2. Noktadan sonraki kısımı (0.xxx) binary olarak yazmak için; a) Sayı, 1’den küçük olduğu için 2’ye bölerek değil, 2 ile çarparak bulunur. b) Çarpmada çıkan sayının, noktadan sonraki kısmının noktadan sonrası 0 olana kadar 2 ile çarpmaya devam edilir. c) Son olarak, çarpmaların sonucunda çıkan sayıların noktadan önceki kısımları yukarıdan aşağıya doğru yazılır. 3. Noktadan önceki ve sonraki kısımlar birleştirilir.
Sabit Noktalı Gösterim - Fixed Point Representation Örnek : (6.75)10 ondalık sayısını Sabit Noktalı Gösterim (Fixed Point) şeklinde oluşturunuz. Virgülden önceki kısım (6)10 = (110)2 Virgülden sonraki kısım 0,75 binary olarak yazılırsa; 0.75 * 2 = 1.5 => 0.5 → (1) 0.5 * 2 = 1.0 => 0 → (1) (0.75)10 = (11)2 olarak bulunur. Sonuç olarak (6.75)10 = (110.11)2 fixed point şeklinde gösterilir.
Sabit Noktalı Sayıların Ondalık Hale Dönüştürülmesi Örnek : Sayı = 10110.101 biçimindeki sabit noktalı sayının ondalık olarak ifadesi. 10110.101 = 1 x 24+0 x 23+1 x 22+1 x 21+0 x 20+1 x 2-1+0 x 2-2+1 x 2-3 = 16 + 0 + 4 + 2 + 0 + 0.5 + 0 + 0.125 =22.625 Doğrulama: Sayı= nx2-m n: n bitlik sayının integer değeri m : noktadan sonraki bit sayısı (10110101)2=(181)10 , olduğundan n = 181 m = 3 Sayı= n x 2-m Sayı = 181 x 2-3 Sayı = 181 / 8 Sayı = 22.625 şeklinde ifade edilir.
Sabit Noktalı Gösterim - Fixed Point Representation 0 - 7 aralığındaki bir tamsayıyı temsil etmek için kullanılabilecek üç tam sayı biti vardır. Böylece, işaret biti ve üç tamsayı bitinin kombinasyonu, -7 ila +7 aralığında pozitif ve negatif tamsayıları temsil etmemizi sağlar. 8 bitlik alanın kesirli (fractional) bölümünde, ilk kesirli bit 1/2 = 0.5'i temsil etmek için kullanılır; ikinci kesirli bit 0.5 / 2 = 0.25'i temsil etmek için kullanılır; üçüncü kesirli bit, 0.25 / 2 = 0.125'u temsil etmek için kullanılır ve dördüncü kesirli bit, 0.125 / 2 = 0.0625'i temsil etmek için kullanılır. Böylece, dört bitlik alan, yukarıda gösterildiği gibi 0,0 ile 0,9375 aralığında kesirli değerleri temsil etmemizi sağlar (tabii ki daha fazla kesirli bitler daha kesin kesirli değerleri temsil etmemize izin verir)
Sabit Noktalı Gösterim - Fixed Point Representation Decimal 1.62510 Binary 1.1012
ÖDEV Sabit Noktalı Sayılarda Dört İşlem Toplama Çıkarma Çarpma Bölme
Kayan Nokta Gösterimi - Floating Point Representation: Bilgisayar uygulamalarında büyük çoğunlukla Kayan Noktalı Sayılar (Floating Point) kullanılmaktadır. Kayan noktalı sayılar, sabit noktalı sayı formatına göre daha geniş sayı aralığına sahiptir. Gelişmiş işlemcilerde noktadan sonraki sayılar için matematiksel işlem yapan Kayan Nokta Ünitesi (Floating Point Unit-FPU) bulunmaktadır. Bu ünite tamsayı olmayan floating point (kayan nokta) hesaplamalarından sorumludur.
Kayan Nokta Gösterimi - Floating Point Representation: Kayan noktalı sayılar tam sayı işlemlerden daha yavaştır. Bilgisayar performanslarının karşılaştırılmasında özellikle bilimsel bilgisayarlarda, kayan noktalı sayılar üzerindeki işlem hızı önemlidir. Kayan nokta (floating point ) hesaplamalarında ölçüm için FLOPS (Floating Point Operation Per Second) kullanılır. FLOPS, bilgisayar sistemlerinde, CPU (Central Processing Unit) ve GPU (Graphic Processing Unit) performanslarını ölçmede kullanılır. FLOPS saniye başına kayan nokta işlemidir. Yani saniyede kaç adet kesirli sayının aritmetik işleme tabi tutulduğunu gösterir.
Kayan Nokta Gösterimi - Floating Point Representation: Bilinen gösterim şekillerinde n bitlik kapasiteyle gösterilebilecek sayı aralığı bellidir. İşaretsiz gösterimde; 0 ile 2n, bire tümleyen şeklindeki gösterimde; -2n-1+1 ile 2n-1, ikiye tümleyen gösteriminde ise; -2n-1 ile 2n-1 arasındaki sayıları göstermek mümkündür.
Kayan Nokta Gösterimi - Floating Point Representation: Bu gösterim şekillerinde çok büyük ve çok küçük değerlerin ifade edilmesi için maliyetli donanıma ihtiyaç duyulur. Örneğin sabit noktalı gösterimde n bitlik alanda noktanın yeri belirlenmiş ve x bit anlamlı kısım için, geri kalan (n-x) bit ise virgülden sonraki kısım için ayrılmıştır. Bu durumda 8 bitin 5 biti sayının tam kısmını, kalan 3 biti virgülden sonraki kısmını ifade ederse 10110.011 11101.001 11111.111 şeklindeki sayılar gösterilebilir.
Kayan Nokta Gösterimi - Floating Point Representation: Kayan noktalı gösterimde ise daha geniş aralıktaki sayılar maliyeti daha düşük donanım ile üretilebilir. Yani 8 bitlik alanda 1.1101101 10.101011 11111.111 şeklinde virgülün herhangi bir aralığa gelerek oluşturacağı bütün kombinasyonları ifade etmek mümkündür.
Kayan Nokta Gösterimi - Floating Point Representation : Kayan noktalı sayılar işaret(sign), mantis(mantissa), taban(base) ve üst(exponent) olarak 4 kısım ile ifade edilir. Kayan noktalı sayı temsili X = mantis x tabanüst şeklindedir. işaret bitinde (+) değer 0, (-) değer 1 ile temsil edilir. Kayan noktalı sayının gösteriminde anlamlı kısmın(mantis) bitleri fazla olursa sayının duyarlılığı, üst bitleri fazla olursa gösterilebilecek sayı aralığı artar. -241.65 = -0.24165 x 103 0.0028 = 0.28 x 10-2 110.11 = 0.11011 x 23
Kayan Nokta Gösterimi - Floating Point Representation : Bilimsel gösterimde sayılar, virgülün solunda 0'dan farklı bir basamak kalacak şekilde 10'un kuvvetiyle çarpım halinde gösterilir. Örneğin; 5647 sayısı, 5.647x103 ve 0.0003456 sayısı 3.456x10-4 şeklinde yazılır. Bu formatta 10'un kuvveti değiştikçe çarpan sayının tam sayı kısmını belirleyen nokta, kuvvetin değişme yönüne uygun olarak kaydırılır. Bu kaydırma işlemine olağanlaştırma (normalizasyon) denir. Kayan noktalı sayılar sistemi de bu temel prensibe dayalı bir sisteme sahiptir. Örneğin 342.36 sayısı 0.34236 x 103 şeklinde gösterilir. Bu gösterimde 34236 mantis, 10 taban, 3 ise üst olarak adlandırılır.
Kayan Nokta Gösterimi - Floating Point Representation :
Kayan Nokta Gösterimi - Floating Point Representation : Kayan noktalı sayılar, ikilik düzendeki sayıların bilimsel gösterimle gösterilmesidir. Kayan noktalı sayılar işaret, mantis ve üst olmak üzere üç kısımdan oluşur. onluk sistemde düşünürsek: 13 sayısı, 13 = 13.0x100 = 1.3x101 = 0.13x102 olarak ifade edilebilir. İkilik sistemde düşünürsek: 1310 = 11012x20 = 110.12x21 = 11.012x22 = 1.1012x23 = 0.11012x24
Kayan Nokta Gösterimi - Floating Point Representation : 8 bitlik bir kayan nokta gösteriminde, en soldaki bit, işaret biti ve bunu takiben 3 bitlik bir üst gösterimi ve ardından 4 bitlik bir mantis söz konusudur. Normalize edilmiş bir kayan noktalı gösterimde, mantisin en önemli biti (solundaki bit) "1" olmalıdır ve kayan noktasının mantisin solunda olduğu kabul edilir. Üst değeri de eksi olabilir, 3 bitlik alanın ilk biti işaret bilgisi tutmaktadır. Geriye kalan 2 bit, üst bilgisi tutabilir. Dolaysıyla, sayının en fazla 3. üstüne kadar olan değer tutulabilir. Böylece 8 bit floating point gösterimde üst için kaydırma(sapma) değeri 23-1-1 = 3 olarak hesaplanır. X XXX XXXX İşaret (Sign) 1 bit Üst (Exponent) 3 bit Mantis (Mantissa) 4 bit
Kayan Nokta Gösterimi - Floating Point Representation : Ondalık 2.625 sayısını 8-bit floating point formatına dönüştürünüz. Tam sayı kısmı, 210 = 102. Kesirli kısım: 0.625 × 2 = 1.25 1 0.25 × 2 = 0.5 0 0.5 × 2 = 1.0 1 0.62510 = 0.1012, ve 2.62510 = 10.1012 10.1012 = 10.1012 × 20 Normalize: 10.1012 × 20 = 1.01012 × 21 Mantis: 0101 Üst: 1 + 3 = 4 = 1002 İşaret biti 0 Sonuç 8 bit floating point gösterim 0 100 0101
Kayan Nokta Gösterimi - Floating Point Representation : Ondalık -4.75 sayısını 8-bit floating point formatına dönüştürünüz. Tam kısım : 410 = 1002 Kesirli kısım : 0.75 × 2 = 1.5 1 0.5 × 2 = 1.0 1 4.7510 = 100.112 normalize: 100.112 = 1.00112 × 22 mantis : 0011 üst : 2 + 3 = 5 = 1012 işaret biti : 1 Sonuç 8 bit floating point gösterim 1 101 0011
Kayan Nokta Gösterimi - Floating Point Representation : 0.4062510 ondalık sayısının 8 bit floating point gösterimini oluşturunuz. 0.40625 × 2 = 0.8125 0 0.8125 × 2 = 1.625 1 0.625 × 2 = 1.25 1 0.25 × 2 = 0.5 0 0.5 × 2 = 1.0 1 0.4062510 = 0.011012 Normalize: 0.011012 = 1.1012 × 2-2 Mantis: 1010, üst: -2 + 3 = 1 = 0012, işaret biti 0 0.40625 ondalık sayısının 8 bit floating point gösterimi 0 001 1010
Kayan Nokta Gösterimi - Floating Point Representation : Ondalık 1.7 sayısını 8-bit floating point formatına dönüştürünüz. Tam sayı kısmı, 110 = 12 Kesirli kısım: 0.7 × 2 = 1.4 1 0.4 × 2 = 0.8 0 0.8 × 2 = 1.6 1 0.6 × 2 = 1.2 1 0.2 × 2 = 0.4 0 … Sürecin sonsuza kadar devam edebileceği görülüyor. Dört bitlik olarak gelebileceğimiz en yakın nokta .1011'dir. Yapabileceğimiz en iyi sekiz bitlik sayı 1.1011 normalize: 1.10112 = (1.1011 × 20)2 mantis : 1011 üst : 0 + 3 = 3 = 0112 işaret biti : 0 SONUÇ 0 011 1011
Kayan Nokta Gösterimi - Floating Point Representation : 111001112 olarak verilen 8-bit floating point gösterimli sayının ondalık değeri nedir? 1 110 0111 Mantis: 1.0111 Üst: 1102 = 610 ; 6 − 3 = 3 De-normalize: 1.01112 × 23 = 1011.1 Dönüşüm: 1011.12 = 1*23 + 0*22 + 1*21 + 1*20 + 1*2-1 =8 +2 +1 + 0.5 = 11.510 İşaret: negatif SONUÇ : -11.510
Kayan Nokta Gösterimi - Floating Point Representation : Verilen 8 bitlik floating point gösterimdeki sayıların ondalık değerlerinin doğruluğunu ispatlayınız. 8 bit floating point: 0 010 0110 ondalık değer: 0.6875 8 bit floating point: 1 101 0011 ondalık değer: -4.75
Kayan Nokta Gösterimi - Floating Point Representation : Kayan noktalı sayıların donanıma bağımlı olmadan uyumlu bir gösterime sahip olması için “ANSI/IEEE 754” standardı geliştirilmiştir. Bu standarda göre kayan noktalı sayıların gösterimi; tek duyarlı -single precision (32 bit) çift duyarlı – double precision (64 bit) geniş duyarlı -extended precision (80 bit) olmak üzere üç şekilde belirlenmiştir.
Kayan Nokta Gösterimi - Floating Point Representation : IEEE standardındaki kayan noktalı sayıların bazı özellikleri Özellik Tek Duyarlı Çift Duyarlı Toplam bit sayısı 32 64 Mantis 23 + 1 saklı bit 52 + 1 saklı bit Üst bit sayısı 8 11 Üst sapma 127 1023 En küçük değer 1.2x10-38 2.2x10-308 En büyük değer 3.4x1038 1.8x10308
Kayan Nokta Gösterimi - Floating Point Representation : Tek duyarlı (single precision) gösterimde; 32 bitin 1 biti işaret için, 8 biti üst için ve 23 biti de anlamlı kısmın (mantis) gösterimi için kullanılmaktadır. İşaret (sign) : Bu bit 1 olduğu zaman, sayı – değerdedir. Şayet 0 veya artı değerde bir sayı ise, bu bit 0 olur. Üst (Exponent): sayının üst değeri bu alanda tutulur. Buna göre bir sayının 2’nin kaçıncı kuvveti ile çarpılabileceğini gösterir. Üst değeri de eksi olabilir, 8 bitlik alanın ilk biti işaret bilgisi tutmaktadır. Geriye kalan 7 bit, üst bilgisi tutabilir. Dolaysıyla, sayının en fazla 127. üstüne kadar olan değer tutulabilir. Böylece Tek duyarlı (single precision) gösterimde üst için kaydırma(sapma) değeri 28-1-1 = 127 olarak hesaplanır. (27 =128 olduğunu ve bu bilginin ilk değerinin 0 için ayrıldığını dolayısıyla, sayımızın 0 – 127 arasında olacağını hatırlayınız). Mantis-(Mantissa) : 23 bit alan kaplayan kısımdır. Örneğin 1.101 x 2-4 sayısı için mantis kısmı 101 olacaktır. X XXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX İşaret (Sign) 1 bit Üst (Exponent) 8 bit Mantis (Mantissa) 23 bit
Kayan Nokta Gösterimi - Floating Point Representation : (6.75)10 sayının fixed point gösterimi (110.11)2 şeklindedir. Bu sayıyı Tek Duyarlı Kayan noktalı (Single Precision Floating Point) gösterimde temsil ediniz. Floating pointe geçmek için, noktadan önce tek basamak bırakılmalı. Bunun için nokta kaydırılır. Normalizasyon: (110.11)2 (1.1011 x 22)2 olur. Nokta iki basamak kaydırıldı. Noktadan sonrası da mantis kısmı olarak alınacak. Üst değerinin saptırılmış hali = kaydırılan basamak sayısı + 127 = 2 + 127 = (129)10 Üst = (129)10 = (10000001)2 olur. İşaret biti : 0 (Pozitif) Mantis : (1011)2 Mantis kısmı 23 bite tamamlayacak şekilde sağ tarafına 0 eklenirse. Sonuç : 0 10000001 10110000000000000000000 şeklinde olur.
Kayan Nokta Gösterimi - Floating Point Representation : ÖRNEK : 6.37510 sayısını Tek Duyarlı Kayan Noktalı (Single Precision Floating Point) ile gösteriniz. 6 → (110)2 0.375×2 = 0.75 (0) 0.75 ×2 = 1.5 (1) 0.5 ×2 = 1.0 (1) 0.375 = (0.011)2 → 6.375 = (110.011)2 Sayı normalize edilirse : 110.011 = 1.10011 x 22 iki basamak kaydırıldı. Sayı > 0 olduğundan işaret biti: 0 Sayının üst değerinin saptırılmış hali: 2+127 = 129 → 12910= 100000012 Mantis (Anlamlı kısım) : 10011 Sayı son olarak : 0 10000001 10011000000000000000000 şeklinde Tek Duyarlı Kayan Noktalı sayı (Single Precision Floating Point) olarak ifade edilir.
Tek Duyarlı Gösterimdeki Bir Sayının Onluk Düzendeki Değerinin Bulunması Pratik Yöntem : 0 10001000 01101100001000000000000 Üst: 100010002 = 13610; 136 − 127 = 9 Denormalize: 1.011011000012 × 29 = 1011011000.01 Dönüşüm: 1011011000.012 = 728.2510
Tek Duyarlı Gösterimdeki Bir Sayının Onluk Düzendeki Değerinin Bulunması 1 01111100 10110000000000000000000 Üst: 011111002 = 12410; 124 − 127 = -3 Denormalize: 1.10112 × 2-3 = 0.0011011 0.00110112 = -0.210937510
Tek Duyarlı Gösterimdeki Bir Sayının Onluk Düzendeki Değerinin Bulunması v = s ×2e×m s = +1 (işaret biti 0 olduğunda pozitif sayılar ve +0) s = −1 (işaret biti 1 olduğunda negatif sayılar ve −0) e = exponent− 127 m = 1.mantis, 1 ≤ m < 2 Mantis (anlamlı kısım) sabit bir ‘1’ ile başlar ve bu bite saklı (hidden) bit denir. Bu değer bellekte tutulmaz. Örnek : 0 10000001 10011000000000000000000 s = +1 e = (10000001)2 – (127)10 = (129-127)10 =(2)10 m = (1.10011)2 = (1+0.5+0.0625+0.03125)10 = (1.59375)10 v = +1 x 22 x 1.59375 = 6.375
Tek Duyarlı Gösterimdeki Bir Sayının Onluk Düzendeki Değerinin Bulunması Örnek : 0 10000000 00000000000000000000000 Yukarıda verilen single precision floating point sayının ondalık değeri nedir? s=+1 e=(10000000)2-(127)10 =(128-127)10 =1 m=(1.0)2= (1)10 v = s ×2e×m =+1 x 21 x 1 =2
ÖDEV 1 10000001 10100000000000000000000 ondalık değer : -6.5 Yukarıda verilen single precision floating point sayının ondalık değerinin doğru olduğunu ispatlayınız. http://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html
Kayan Nokta Gösterimi - Floating Point Representation : Çift duyarlı gösterimde (double precision) : Çift duyarlı gösterimde 64 bitin 1 biti işaret için, 11 biti üst için ve 52 biti de anlamlı kısmın gösterimi için kullanılmaktadır. Anlamlı kısımda çok bit kullanmak duyarlılığı/hassasiyeti artırırken, üs kısımda çok bit kullanımı aralığı artırır. Bu gösterimde üs için sapma değeri 211-1-1 =1023 olarak hesaplanır. X XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX İşaret (Sign) 1 bit Üst (Exponent) 11 bit Mantis (Mantissa) 52 bit
Çift duyarlı Kayan Noktalı gösterim (Double Precision Floating Point) ÖRNEK : 6.37510 sayısını Çift Duyarlı Kayan Noktalı (Double Precision Floating Point) ile gösteriniz. 6 → (110)2 0.375×2 = 0.75 (0) 0.75 ×2 = 1.5 (1) 0.5 ×2 = 1.0 (1) 0.375 = (0.011)2 → 6.375 = (110.011)2 Sayı normalize edilirse : 110.011 = 1.10011 x 22 iki basamak kaydırıldı. Sayı > 0 olduğundan işaret biti: 0 Sayının üst değerinin saptırılmış hali: 2+1023 = 1025 → 102510= 100000000012 Mantis (Anlamlı kısım) : 10011 Sayı son olarak : 0 10000000001 1001100000000000000000000000000000000000000000000000 şeklinde Çift Duyarlı Kayan Noktalı sayı (Double Precision Floating Point) olarak ifade edilir.
Ödev Kayan Noktalı Sayılarda Dört İşlem Toplama Çıkarma Çarpma Bölme