2 Hatalar ve Makine Sayıları
Bilgisayar sonsuz basamaklı bir reel sayıyı saklayamaz, sonsuz bir seriyi sonuna kadar toplayamaz. Bu yüzden her nümerik sonuç bir yaklaşımdır ve yaklaşımın ne kadar iyi olduğunu bilmek için hatanın nereden geldiğini ve ne kadar büyüyebileceğini bilmek gerekir. Küçük görünen hatalar pahalıya patlayabilir: 25 Şubat 1991’de Dhahran’da bir Patriot füzesi, zamanın 0,1 saniyelik adımlarla 24 bitte kesilerek tutulmasından doğan birikmiş hata (yaklaşık 100 saatte 0,34 saniye) yüzünden bir Scud füzesini kaçırdı ve 28 asker öldü. 4 Haziran 1996’da ise Ariane 5 roketi, 64 bitlik bir kayan noktalı sayının 16 bitlik işaretli tam sayıya çevrilmesinde oluşan taşma yüzünden fırlatıştan yaklaşık 37 saniye sonra yok edildi.
Bu bölümde önce hata türlerini ayırıp hatayı mutlak ve bağıl hata ile ölçeceğiz. Ardından bilgisayarın sayıları nasıl sakladığını, 64 bitlik makine sayılarını ve k-basamak kesme ile yuvarlamanın yaptığı hatanın sınırını göreceğiz.
2.1 Hata Türleri
Nümerik bir yöntemle bulunan sonuç ile analitik çözüm arasındaki farka hata denir. Nümerik hatalar kaynaklarına göre üç türe ayrılır.
Tanım 2.1 (Veri Hatası) Problemi kuran ya da çözen kişiden kaynaklanan hatalara veri hatası denir. Fiziksel ya da matematiksel modeli kurarken, işlem yaparken ya da program yazarken yapılan yanlışlar ve denklemlerin katsayılarını belirlemek için yapılan deneylerde ölçüm aletlerinin sınırlı hassaslığından doğan hatalar bu türdendir.
Yani veri hatası, yöntem çalışmaya başlamadan önce girdiye karışmış hatadır. Yöntemin kendisiyle ilgisi olmadığından bu notlarda bu tür hatalarla ilgilenmeyeceğiz.
Tanım 2.2 (Kesme Hatası) Matematiksel bir işlemin gerçek sonucunu ifade etmek için onun yerine bir yaklaşım kullanılmasından doğan farka kesme hatası denir.
Yani kesme hatası yöntemin kendisinden gelir: sonsuz bir süreç sonlu bir adımda kesilir. Örneğin bir fonksiyonun değerini Taylor polinomuyla hesapladığımızda serinin atılan terimleri kesme hatasını oluşturur; bu hata Taylor Teoremi’ndeki kalan terimle ölçülür (Teorem 1.9).
Tanım 2.3 (Yuvarlama Hatası) Bilgisayarın sayıları yalnız belirli sayıda basamakla gösterebilmesinden doğan hataya yuvarlama hatası denir.
Yani yöntem kusursuz olsa bile sayıların kendisi sonlu basamakla saklandığı için bir fark oluşur. Örneğin dört ondalık basamakla
\[ \begin{aligned} \pi &= 3{,}141592653\ldots \approx 3{,}1416, \\[1mm] e &= 2{,}71828182\ldots \approx 2{,}7183, \\[1mm] \frac{1}{3} &= 0{,}33333333\ldots \approx 0{,}3333 \end{aligned} \]
yazılır. Patriot füzesindeki hata da bu türdendir: \(0{,}1\) sayısı ikili sistemde sonlu basamakla yazılamaz (\(0{,}000110011001100\ldots_2\)), 24 bitte kesilince her adımda küçük bir fark kalır ve bu fark adım adım birikir.
2.2 Mutlak ve Bağıl Hata
Bir yaklaşımın ne kadar iyi olduğunu bir sayıyla ölçmek için iki nicelik kullanılır.
Tanım 2.4 (Mutlak ve Bağıl Hata) Bir \(p\) sayısına yapılan bir yaklaşım \(p^*\) ile gösterilsin. \(|p - p^*|\) değerine bu yaklaşımın mutlak hatası denir. \(p \neq 0\) olmak üzere
\[\left| \frac{p - p^*}{p} \right|\]
değerine de bu yaklaşımın bağıl hatası denir.
Yani mutlak hata yaklaşımın gerçek değerden ne kadar uzakta olduğunu, bağıl hata ise bu uzaklığın gerçek değerin büyüklüğüne oranını söyler. Bağıl hata birimsizdir; \(0{,}01\) bağıl hata “yüzde 1 hata” demektir.
Örnek 2.1 (Mutlak ve Bağıl Hatanın Hesabı) \(p = 0{,}3\) sayısına \(p^* = 0{,}31\) yaklaşımı yapılmıştır. Mutlak ve bağıl hatayı bulunuz.
Çözüm
Mutlak hata
\[|p - p^*| = |0{,}3 - 0{,}31| = 0{,}01\]
ve bağıl hata
\[\left| \frac{p - p^*}{p} \right| = \frac{0{,}01}{0{,}3} = \frac{1}{30} \approx 0{,}0333\]
olur. \(\blacksquare\)
Bir yaklaşımın gerçek değere ne oranda yaklaştığını ölçmek için bağıl hata mutlak hatadan daha anlamlıdır. Aynı mutlak hata, küçük bir nicelikte büyük, büyük bir nicelikte küçük bir kusurdur.
Örnek 2.2 (Aynı Mutlak Hata, Farklı Bağıl Hata) \(100\) km’lik bir yol \(101\) km, \(1\) km’lik bir yol \(2\) km olarak ölçülmüştür. Hangi ölçme daha kabul edilebilirdir?
Çözüm
Mutlak hatalar. İki ölçmede de mutlak hata aynıdır:
\[|100 - 101| = 1 \text{ km}, \qquad |1 - 2| = 1 \text{ km}.\]
Bu yüzden mutlak hata iki ölçmeyi ayırt etmez.
Bağıl hatalar. Birinci ölçmenin bağıl hatası
\[\left| \frac{100 - 101}{100} \right| = \frac{1}{100} = 0{,}01,\]
ikinci ölçmeninki
\[\left| \frac{1 - 2}{1} \right| = 1\]
olur. \(0{,}01 < 1\) olduğundan birinci ölçme daha kabul edilebilirdir: ilki yüzde 1, ikincisi yüzde 100 hatalıdır. \(\blacksquare\)
2.3 Makine Sayıları
Bilgisayarda sayılar iki biçimde saklanır: tam sayı değerleri ve kayan noktalı sayı değerleri. Yalnız tam sayılarla çalışılacaksa tam sayı değeri yeterlidir; herhangi bir reel sayıyla işlem yapılacaksa kayan noktalı sayı değerine ihtiyaç vardır.
Tam sayılar ikili sayı sisteminde yazılır ve ayrılan bit sayısı gösterilebilecek en büyük tam sayıyı sınırlar. Örneğin \(16\) bitle yazılabilecek en büyük tam sayı
\[2^{16} - 1 = 65535\]
olur. Bu \(16\) bitin biri sayının işaretine ayrılırsa geriye \(15\) bit kalır ve işaretli olarak yazılabilecek en büyük tam sayı
\[2^{16-1} - 1 = 32767\]
olur.
Tanım 2.5 (Taşma) Bir sayının, onu saklamak için ayrılan bitlerle gösterilebilecek en büyük (ya da en küçük) değeri aşmasına taşma problemi denir.
Yani sonuç ayrılan yere sığmaz ve saklanan değer artık gerçek değerle ilgisizdir. Ariane 5’i yok eden hata buydu: \(16\) bitlik işaretli bir tam sayıya \(32767\)’yi aşan bir değer yazılmak istendi.
Kayan nokta gösterimi hem kesirleri hem de çok büyük reel sayıları saklamayı mümkün kılar. Bugün kullanılan biçim, IEEE’nin (The Institute of Electrical and Electronics Engineers) 1985’te yayımladığı ve 2008 ile 2019’da güncellediği IEEE 754 kayan nokta standardıdır. Bu standart \(64\) bitlik bir reel sayıyı şöyle saklar:
\[s\ c_{10} c_9 \ldots c_1 c_0\ m_{51} m_{50} \ldots m_1 m_0\]
Bitlerin görevleri aşağıdaki tablodadır.
| Sembol | Bit | Tanım |
|---|---|---|
| \(s\) | \(1\) | İşaret Biti: \(0\) = pozitif, \(1\) = negatif |
| \(c\) | \(11\) | Karakteristik |
| \(m\) | \(52\) | Mantis |
Tanım 2.6 (64 Bitlik Makine Sayısı) \(s\) işaret biti, \(c_{10}, \ldots, c_0\) karakteristik bitleri ve \(m_{51}, \ldots, m_0\) mantis bitleri olmak üzere
\[c = \sum_{k=0}^{10} c_k\, 2^k, \qquad m = \sum_{k=0}^{51} m_k \left( \frac{1}{2} \right)^{52-k}\]
denirse \(64\) bitlik makine sayısının gösterdiği reel sayı
\[r = (-1)^s\, 2^{c-1023}\, (1 + m)\]
olur. Karakteristiğin \(c = 0\) (\(00000000000\)) değeri \(0\) sayısını, \(c = 2047\) (\(11111111111\)) değeri sonsuzu göstermek için ayrılmıştır; bu formülle yazılan sayılarda \(1 \le c \le 2046\)’dır.
Yani karakteristik sayının büyüklük mertebesini (\(2\)’nin kuvvetini), mantis ise anlamlı basamaklarını taşır. \(c\)’den \(1023\) çıkarılması üssün negatif de olabilmesini sağlar. Mantisteki ilk bit \(\frac{1}{2}\), ikincisi \(\frac{1}{4}\) ağırlığındadır ve \(0 \le m < 1\) olur. Mantis yalnız \(52\) ikili basamak tutabildiğinden bu gösterimde bir yuvarlama hatası oluşur.
Örnek 2.3 (Bir Bit Dizisinin Çözülmesi) Aşağıdaki \(64\) bitlik makine sayısının gösterdiği \(r\) reel sayısını bulunuz.
0100000000111011100100010000000000000000000000000000000000000000
Çözüm
Bitleri ayıralım. İlk bit \(s\), sonraki \(11\) bit \(c\), kalan \(52\) bit \(m\)’dir:
\[\underbrace{0}_{s}\ \underbrace{10000000011}_{c}\]
\[\underbrace{1011100100010000000000000000000000000000000000000000}_{m}\]
İşaret. \(s = 0\) olduğundan sayı pozitiftir.
Karakteristik. \(c\)’nin yalnız \(c_{10}\), \(c_1\) ve \(c_0\) bitleri \(1\)’dir:
\[c = 1 \cdot 2^0 + 1 \cdot 2^1 + 0 \cdot 2^2 + \dots + 0 \cdot 2^9 + 1 \cdot 2^{10} = 1 + 2 + 1024 = 1027.\]
Mantis. Soldan \(1\)., \(3\)., \(4\)., \(5\)., \(8\). ve \(12\). bitler \(1\), geri kalanlar \(0\)’dır:
\[ \begin{aligned} m &= 1 \cdot \left(\tfrac{1}{2}\right)^1 + 0 \cdot \left(\tfrac{1}{2}\right)^2 + 1 \cdot \left(\tfrac{1}{2}\right)^3 + 1 \cdot \left(\tfrac{1}{2}\right)^4 + 1 \cdot \left(\tfrac{1}{2}\right)^5 \\[1mm] &\quad + 1 \cdot \left(\tfrac{1}{2}\right)^8 + 1 \cdot \left(\tfrac{1}{2}\right)^{12} \\[1mm] &= \frac{1}{2} + \frac{1}{8} + \frac{1}{16} + \frac{1}{32} + \frac{1}{256} + \frac{1}{4096}. \end{aligned} \]
Sayı. Formülde yerine yazarsak
\[ \begin{aligned} r &= (-1)^0 \cdot 2^{1027-1023} \left( 1 + \frac{1}{2} + \frac{1}{8} + \frac{1}{16} + \frac{1}{32} + \frac{1}{256} + \frac{1}{4096} \right) \\[1mm] &= 16 + 8 + 2 + 1 + 0{,}5 + 0{,}0625 + 0{,}00390625 \\[1mm] &= 27{,}56640625 = 0{,}2756640625 \cdot 10^{2} \end{aligned} \]
bulunur. \(\blacksquare\)
\(c\)’nin aldığı değerler sınırlı olduğundan \(64\) bitlik gösterimin yazabildiği pozitif sayılar da iki yandan sınırlıdır.
Önerme 2.1 (64 Bitlik Gösterimde En Küçük ve En Büyük Pozitif Sayı) \(64\) bitlik makine sayısı gösteriminde yazılabilecek en küçük pozitif reel sayı
\[2^{-1022} \approx 0{,}22251 \cdot 10^{-307},\]
en büyük reel sayı ise
\[2^{1023}\left(2 - 2^{-52}\right) \approx 0{,}17977 \cdot 10^{309}\]
olur.
İspat
\(r = (-1)^s\, 2^{c-1023} (1 + m)\) sayısının pozitif olması için \(s = 0\) olmalıdır. \(r\) hem \(c\)’ye hem \(m\)’ye göre artandır.
En küçük sayı. \(c = 0\) değeri \(0\) sayısına ayrıldığından \(c\)’nin alabileceği en küçük değer \(00000000001\), yani \(c = 1\)’dir. Mantisin en küçük değeri bütün bitleri \(0\) olan \(m = 0\)’dır. Buradan
\[r = (-1)^0 \cdot 2^{1-1023} (1 + 0) = 2^{-1022}\]
olur. Ondalığa çevirirsek
\[2^{-1022} = 10^{-1022 \log_{10} 2} \approx 10^{-307{,}65266} \approx 0{,}22251 \cdot 10^{-307}\]
bulunur.
En büyük sayı. \(c = 2047\) değeri sonsuza ayrıldığından \(c\)’nin en büyük değeri \(11111111110\), yani \(c = 2046\)’dır. Mantisin en büyük değeri bütün bitleri \(1\) olan değerdir:
\[m = \sum_{k=0}^{51} \left( \frac{1}{2} \right)^{52-k} = \frac{1}{2} + \frac{1}{4} + \dots + \frac{1}{2^{52}} = 1 - 2^{-52}.\]
Buradan
\[ \begin{aligned} r &= (-1)^0 \cdot 2^{2046-1023} \left( 1 + 1 - 2^{-52} \right) \\[1mm] &= 2^{1023} \left( 2 - 2^{-52} \right) \approx 2^{1024} \approx 0{,}17977 \cdot 10^{309} \end{aligned} \]
olur; son adımda \(2^{1024} = 10^{1024 \log_{10} 2} \approx 10^{308{,}25472}\) kullanıldı. \(\blacksquare\)
Yani \(64\) bitlik gösterim yaklaşık \(10^{-308}\) ile \(10^{308}\) arasındaki büyüklükleri kapsar. İşlemler belirli bir hassasiyetle yapılmazsa bu sınırlar aşılabilir ve taşma problemleri ortaya çıkar.
2.4 Ondalık Kayan Nokta Sayıları
Makinenin ikili gösteriminde olanları elle izleyebilmek için aynı fikri \(10\) tabanında, az sayıda basamakla inceleyeceğiz.
Tanım 2.7 (k-Basamak Normalize Edilmiş Ondalık Kayan Nokta Sayısı) \(1 \le d_1 \le 9\) ve \(i = 2, 3, \ldots, k\) için \(0 \le d_i \le 9\) olmak üzere
\[\pm\, 0{,}d_1 d_2 \ldots d_k \cdot 10^n\]
biçiminde yazılabilen sayılara k-basamak normalize edilmiş ondalık kayan nokta sayıları denir.
Yani virgülden hemen sonra sıfır olmayan bir basamak gelir ve yalnız \(k\) basamak tutulur; sayının büyüklüğü \(10^n\) çarpanına aktarılır. \(d_1 \neq 0\) koşulu gösterimi tek kılar: \(0{,}27 \cdot 10^{-5}\) yazılır, \(0{,}027 \cdot 10^{-4}\) yazılmaz. Birkaç sayının normalize edilmiş ondalık formu şöyledir:
| Sayı | Normalize edilmiş ondalık form |
|---|---|
| \(1222000\) | \(0{,}1222 \cdot 10^{7}\) |
| \(-0{,}0000345\) | \(-0{,}345 \cdot 10^{-4}\) |
| \(0{,}0027 \cdot 10^{-3}\) | \(0{,}27 \cdot 10^{-5}\) |
| \(0{,}1001 \cdot 10^{-5}\) | \(0{,}1001 \cdot 10^{-5}\) |
Örnek 2.4 (İki Basamaklı Normalize Sayıların Dağılımı) \(k = 2\) için üssü \(n = 0\) ve \(n = 1\) olan pozitif normalize edilmiş ondalık kayan nokta sayılarını sayınız ve ardışık iki sayı arasındaki uzaklığı bulunuz.
Çözüm
\(n = 0\). Sayılar \(0{,}d_1 d_2\) biçimindedir: \(0{,}10;\ 0{,}11;\ \ldots;\ 0{,}99\). \(d_1\) için \(9\), \(d_2\) için \(10\) seçenek olduğundan \(9 \cdot 10 = 90\) sayı vardır ve ardışık ikisi arasındaki uzaklık \(0{,}01 = 10^{0-2}\)’dir.
\(n = 1\). Sayılar \(0{,}d_1 d_2 \cdot 10 = d_1{,}d_2\) biçimindedir: \(1{,}0;\ 1{,}1;\ \ldots;\ 9{,}9\). Yine \(90\) sayı vardır, ama ardışık ikisi arasındaki uzaklık \(0{,}1 = 10^{1-2}\)’dir.
Sonuç. Her üs için sayı adedi aynıdır, aralık ise üs bir arttıkça \(10\) katına çıkar. Bu yüzden normalize sayılar \(0\)’a yakın yerde sık, büyük sayılar arasında seyrektir. Aralığın sayının kendisine oranı ise yaklaşık sabit kalır: \(n = 0\)’da \(\frac{0{,}01}{0{,}10} = 0{,}1\) ile \(\frac{0{,}01}{0{,}99} \approx 0{,}0101\) arasındadır, \(n = 1\)’de de aynı aralıktadır. Genel olarak \(k\) basamakta her üs için \(9 \cdot 10^{k-1}\) sayı vardır ve aralık \(10^{n-k}\)’dir. \(\blacksquare\)
\(y = 0{,}d_1 d_2 d_3 \ldots d_k d_{k+1} d_{k+2} \ldots \cdot 10^n\) taşmaya neden olmayan normalize edilmiş bir sayı olsun. Bu sayının basamakları genellikle \(k\)’dan çoktur, hatta sonsuzdur; makinede onun yerine \(k\) basamaklı bir sayı saklanır.
Tanım 2.8 (Kayan Nokta Formu: k-Basamak Kesme ve Yuvarlama) \(y = 0{,}d_1 d_2 \ldots d_k d_{k+1} d_{k+2} \ldots \cdot 10^n\) sayısının ondalık kısmının yalnız \(k\) basamağı alınarak elde edilen sayıya \(y\)’nin kayan nokta formu denir ve \(KN(y)\) ile gösterilir. \(k\) basamak iki yolla belirlenir:
- k-basamak kesme: \(d_{k+1} d_{k+2} \ldots\) basamakları atılır, \[KN(y) = 0{,}d_1 d_2 \ldots d_k \cdot 10^n.\]
- k-basamak yuvarlama: \(y\)’ye \(5 \cdot 10^{n-(k+1)}\) eklenir ve sonuca k-basamak kesme uygulanır, \[KN(y) = 0{,}\delta_1 \delta_2 \ldots \delta_k \cdot 10^n.\]
Negatif sayılarda aynı işlem \(|y|\)’ye uygulanır ve işaret korunur.
Yani kesmede fazla basamaklar düpedüz atılır. Yuvarlamada \(d_{k+1} \ge 5\) ise \(d_k\)’ya \(1\) eklenir (yukarı yuvarlama), \(d_{k+1} < 5\) ise \(k\) basamaktan sonra kesilir (aşağı yuvarlama). Aşağı yuvarlamada \(i = 1, 2, \ldots, k\) için \(\delta_i = d_i\) olur; yukarı yuvarlamada ise elde yüzünden önceki basamaklar, hatta üs de değişebilir; örneğin \(0{,}99996 \cdot 10^{1}\) sayısı 4-basamak yuvarlamayla \(0{,}1000 \cdot 10^{2}\) olur. Buradaki “kesme” sayının basamaklarını atmaktır; kesme hatası ise (Tanım 2.2) bir sonsuz sürecin yarıda bırakılmasından doğar.
Örnek 2.5 (π Sayısının 5-Basamak Kesmesi) \(\pi\) sayısını 5-basamak kesme yaparak normalize edilmiş ondalık kayan nokta formunda yazınız.
Çözüm
Normalize form. \(\pi = 3{,}141592654\ldots\) olduğundan normalize edilmiş ondalık formu
\[\pi = 0{,}3141592654\ldots \cdot 10^{1}\]
olur; burada \(n = 1\)’dir.
Kesme. İlk beş basamak \(3, 1, 4, 1, 5\)’tir; altıncı ve sonraki basamaklar atılır:
\[KN(\pi) = 0{,}31415 \cdot 10^{1}.\]
Mutlak hata \(|\pi - 3{,}1415| \approx 0{,}0000927\), bağıl hata yaklaşık \(0{,}29 \cdot 10^{-4}\)’tür. \(\blacksquare\)
Örnek 2.6 (π Sayısının 5-Basamak Yuvarlaması) \(\pi\) sayısını 5-basamak yuvarlama yaparak normalize edilmiş ondalık kayan nokta formunda yazınız.
Çözüm
Normalize form. \(\pi = 0{,}3141592654\ldots \cdot 10^{1}\), yani \(n = 1\)’dir.
Yuvarlama. \(k = 5\) ve \(n = 1\) için eklenecek sayı \(5 \cdot 10^{1-6} = 0{,}00005\)’tir:
\[\pi + 0{,}00005 = 3{,}14164265\ldots = 0{,}314164265\ldots \cdot 10^{1}.\]
Bunu 5 basamaktan sonra kesersek
\[KN(\pi) = 0{,}31416 \cdot 10^{1}\]
bulunur. Kısa yoldan: altıncı basamak \(d_6 = 9 \ge 5\) olduğundan beşinci basamak \(5\)’ten \(6\)’ya çıkar. Mutlak hata \(|\pi - 3{,}1416| \approx 0{,}0000073\), bağıl hata yaklaşık \(0{,}23 \cdot 10^{-5}\)’tir; yuvarlama kesmeden yaklaşık on üç kat daha iyi sonuç verdi.
Gerçek hesaplarda yalnız sayılar değil, her işlemin sonucu da \(k\) basamağa indirilir.
Tanım 2.9 (k-Basamak Kesme ve Yuvarlama Aritmetiği) Bir ifadenin hesabında her sayının ve her ara işlem sonucunun yerine onun k-basamak kesmeyle bulunan \(KN\) formu kullanılırsa hesap k-basamak kesme aritmetiğiyle, k-basamak yuvarlamayla bulunan \(KN\) formu kullanılırsa k-basamak yuvarlama aritmetiğiyle yapılmış olur.
Yani makine yalnız sonucu değil, yolda bulduğu her ara değeri de \(k\) basamağa indirir; bu yüzden ara adımların hataları sonuca taşınır ve birikebilir.
- Girdileri indir. İfadedeki her sayıyı normalize forma getirip \(KN\) formunu al (\(\frac{1}{3} \to 0{,}333\) gibi).
- İşlemleri sırayla yap. İşlem önceliğine göre her işlemi yap ve sonucu hemen \(KN\) formuna indir; bir sonraki işleme bu indirilmiş değerle geç.
- Hatayı ölç. Gerçek değer biliniyorsa son sonucun mutlak ve bağıl hatasını hesapla.
Örnek 2.7 (Üç-Basamak Kesme Aritmetiğiyle Bir Kesir Hesabı) \(\left( \frac{1}{3} + \frac{3}{11} \right) - \frac{3}{20}\) işleminin gerçek değerini bulunuz. İşlemi 3-basamak kesme aritmetiğiyle yapıp yaklaşık değeri ve bu değerin bağıl hatasını hesaplayınız.
Çözüm
Gerçek değer.
\[\left( \frac{1}{3} + \frac{3}{11} \right) - \frac{3}{20} = \frac{11 + 9}{33} - \frac{3}{20} = \frac{400 - 99}{660} = \frac{301}{660} = 0{,}4560606\ldots\]
Girdiler. \(\frac{1}{3} = 0{,}3333\ldots \to 0{,}333\), \(\frac{3}{11} = 0{,}2727\ldots \to 0{,}272\) ve \(\frac{3}{20} = 0{,}15 \to 0{,}150\).
İşlemler. \(0{,}333 + 0{,}272 = 0{,}605\) ve \(0{,}605 - 0{,}150 = 0{,}455\); ikisi de zaten üç basamaklıdır. Yaklaşık değer \(0{,}455\)’tir.
Bağıl hata.
\[\left| \frac{\frac{301}{660} - 0{,}455}{\frac{301}{660}} \right| = \frac{301 - 300{,}3}{301} = \frac{0{,}7}{301} = \frac{1}{430} \approx 0{,}002325581.\]
\(\blacksquare\)
Örnek 2.8 (Üç-Basamak Yuvarlama Aritmetiğiyle Bir Kesir Hesabı) \(\left( \frac{1}{3} + \frac{3}{11} \right) - \frac{3}{20}\) işlemini 3-basamak yuvarlama aritmetiğiyle yapıp yaklaşık değeri ve bu değerin bağıl hatasını hesaplayınız. (Gerçek değer \(\frac{301}{660}\)’dır.)
Çözüm
Girdiler. \(\frac{1}{3} = 0{,}3333\ldots \to 0{,}333\); \(\frac{3}{11} = 0{,}2727\ldots\) sayısının dördüncü basamağı \(7 \ge 5\) olduğundan \(\frac{3}{11} \to 0{,}273\); \(\frac{3}{20} \to 0{,}150\).
İşlemler. \(0{,}333 + 0{,}273 = 0{,}606\) ve \(0{,}606 - 0{,}150 = 0{,}456\). Yaklaşık değer \(0{,}456\)’dır.
Bağıl hata.
\[\left| \frac{\frac{301}{660} - 0{,}456}{\frac{301}{660}} \right| = \frac{301 - 300{,}96}{301} = \frac{0{,}04}{301} = \frac{1}{7525} \approx 0{,}00013289.\]
Yuvarlama aritmetiğinin bağıl hatası kesmeninkinin yaklaşık on yedide biridir. \(\blacksquare\)
Bir sayıyı saklarken yapılan bağıl hata yalnız \(k\)’ya bağlı bir sayıyla sınırlıdır; işlemler art arda yapıldığında ise bu hatalar birikebilir.
Önerme 2.2 (Kesme ve Yuvarlamada Bağıl Hata Sınırı) \(y \neq 0\) bir reel sayı ve \(KN(y)\) onun \(k\) basamaklı kayan nokta formu olsun.
- \(KN(y)\) k-basamak kesmeyle bulunmuşsa \(\left| \dfrac{y - KN(y)}{y} \right| \le 10^{-k+1}\) olur.
- \(KN(y)\) k-basamak yuvarlamayla bulunmuşsa \(\left| \dfrac{y - KN(y)}{y} \right| \le 0{,}5 \cdot 10^{-k+1}\) olur.
İspat
İşaret iki yanda da aynı kaldığından \(y > 0\) almak yeterlidir. \(y = 0{,}d_1 d_2 \ldots d_k d_{k+1} \ldots \cdot 10^n\) olsun.
Payda. \(d_1 \ge 1\) olduğundan \(y = 0{,}d_1 d_2 \ldots \cdot 10^n \ge 0{,}1 \cdot 10^n\) olur.
Atılan kısım. \(y\)’yi ilk \(k\) basamak ve geri kalan olarak ayıralım:
\[y = \left( 0{,}d_1 d_2 \ldots d_k + 0{,}\underbrace{0 \ldots 0}_{k} d_{k+1} d_{k+2} \ldots \right) \cdot 10^n.\]
İkinci terim \(0{,}d_{k+1} d_{k+2} \ldots \cdot 10^{n-k}\)’ya eşittir.
Kesme. \(KN(y) = 0{,}d_1 \ldots d_k \cdot 10^n\) olduğundan
\[\left| \frac{y - KN(y)}{y} \right| = \frac{0{,}d_{k+1} d_{k+2} \ldots \cdot 10^{n-k}}{0{,}d_1 d_2 \ldots \cdot 10^n} \le \frac{1 \cdot 10^{n-k}}{0{,}1 \cdot 10^n} = 10^{-k+1}\]
olur, çünkü \(0{,}d_{k+1} d_{k+2} \ldots \le 1\)’dir.
Yuvarlama, \(d_{k+1} < 5\) durumu. Aşağı yuvarlama yapılır ve \(KN(y)\) kesmedeki ile aynıdır. Bu kez \(d_{k+1} \le 4\) olduğundan \(0{,}d_{k+1} d_{k+2} \ldots \le 0{,}5\)’tir:
\[\left| \frac{y - KN(y)}{y} \right| = \frac{0{,}d_{k+1} d_{k+2} \ldots \cdot 10^{n-k}}{0{,}d_1 d_2 \ldots \cdot 10^n} \le \frac{0{,}5 \cdot 10^{n-k}}{0{,}1 \cdot 10^n} = 0{,}5 \cdot 10^{-k+1}.\]
Yuvarlama, \(d_{k+1} \ge 5\) durumu. Yukarı yuvarlama yapılır: \(k\)-ıncı basamağa \(1\) eklenir, yani
\[KN(y) = \left( 0{,}d_1 d_2 \ldots d_k + 10^{-k} \right) \cdot 10^n\]
olur (elde oluşsa da bu eşitlik sayı değeri olarak doğrudur). Bu durumda \(KN(y) > y\) ve
\[ \begin{aligned} |KN(y) - y| &= \left( 1 \cdot 10^{-k} - 0{,}d_{k+1} d_{k+2} \ldots \cdot 10^{-k} \right) \cdot 10^n \\[1mm] &= \left( 1 - 0{,}d_{k+1} d_{k+2} \ldots \right) \cdot 10^{n-k} \end{aligned} \]
olur. \(d_{k+1} \ge 5\) olduğundan \(0{,}d_{k+1} d_{k+2} \ldots \ge 0{,}5\), dolayısıyla \(1 - 0{,}d_{k+1} d_{k+2} \ldots \le 0{,}5\)’tir. Buradan
\[\left| \frac{y - KN(y)}{y} \right| = \frac{(1 - 0{,}d_{k+1} d_{k+2} \ldots) \cdot 10^{n-k}}{0{,}d_1 d_2 \ldots \cdot 10^n} \le \frac{0{,}5 \cdot 10^{n-k}}{0{,}1 \cdot 10^n} = 0{,}5 \cdot 10^{-k+1}\]
bulunur. \(\blacksquare\)
Yani \(k\) basamakla çalışan bir makinede tek bir sayıyı saklamanın bağıl hatası, sayının büyüklüğünden bağımsız olarak, kesmede \(10^{-k+1}\)’i, yuvarlamada bunun yarısını aşmaz. Örneğin \(\pi\)’nin 5-basamak kesmesinde bağıl hata \(0{,}29 \cdot 10^{-4} \le 10^{-4}\), 5-basamak yuvarlamasında \(0{,}23 \cdot 10^{-5} \le 0{,}5 \cdot 10^{-4}\)’tür. Sınır tek bir sayı içindir; art arda yapılan işlemlerde hatalar birikir ve bu sınır aşılabilir.
2.5 Alıştırmalar
Aşağıdaki alıştırmalar mutlak ve bağıl hatayı, k-basamak aritmetiğini ve seri yaklaşımlarının hatasını birlikte kullanır.
Alıştırma 2.1 (Bağıl Hatası Sınırlı Yaklaşımlar) \(p^*\) sayısının \(\sqrt{2}\)’ye en fazla \(10^{-4}\) bağıl hata ile yaklaştığı en geniş aralığı bulunuz.
Çözüm
Koşulu yazalım. Tanım 2.4 gereği istenen koşul
\[\frac{|p^* - \sqrt{2}|}{|\sqrt{2}|} \le 10^{-4}\]
eşitsizliğidir.
Mutlak değeri açalım. \(\sqrt{2} > 0\) olduğundan iki yanı \(\sqrt{2}\) ile çarparız:
\[ \begin{aligned} |p^* - \sqrt{2}| \le \sqrt{2} \cdot 10^{-4} &\iff \sqrt{2} - \sqrt{2} \cdot 10^{-4} \le p^* \le \sqrt{2} + \sqrt{2} \cdot 10^{-4} \\[1mm] &\iff \sqrt{2}\,(1 - 0{,}0001) \le p^* \le \sqrt{2}\,(1 + 0{,}0001). \end{aligned} \]
Aralık. Aranan en geniş aralık
\[\left[ 0{,}9999\sqrt{2};\ 1{,}0001\sqrt{2} \right] \approx \left[ 1{,}4140721;\ 1{,}4143550 \right]\]
olur. \(\blacksquare\)
Alıştırma 2.2 (Üç-Basamak Yuvarlama Aritmetiğiyle Bir Oran) \[\frac{\frac{13}{14} - \frac{6}{7}}{2e - 5{,}4}\]
kesrinin değerini üç-basamak yuvarlama aritmetiği kullanarak hesaplayınız. Kesrin gerçek değeri yaklaşık olarak \(1{,}954\) olduğuna göre hesaptaki mutlak ve bağıl hataları bulunuz.
Çözüm
Pay. \(\frac{13}{14} = 0{,}92857\ldots \to 0{,}929\) ve \(\frac{6}{7} = 0{,}85714\ldots \to 0{,}857\) olduğundan
\[\frac{13}{14} - \frac{6}{7} \approx 0{,}929 - 0{,}857 = 0{,}072 = 0{,}720 \cdot 10^{-1}.\]
Payda. \(e = 2{,}71828\ldots\) sayısı \(0{,}272 \cdot 10^{1} = 2{,}72\) olarak alınır ve
\[2e - 5{,}4 \approx 2 \cdot 2{,}72 - 5{,}40 = 5{,}44 - 5{,}40 = 0{,}0400 = 0{,}400 \cdot 10^{-1}.\]
Kesir.
\[\frac{0{,}720 \cdot 10^{-1}}{0{,}400 \cdot 10^{-1}} = 1{,}80 = 0{,}180 \cdot 10^{1}.\]
Hatalar. Mutlak hata
\[|1{,}80 - 1{,}954| = 0{,}154,\]
bağıl hata
\[\frac{|1{,}80 - 1{,}954|}{|1{,}954|} = \frac{0{,}154}{1{,}954} \approx 0{,}0788 = 0{,}788 \cdot 10^{-1}\]
bulunur. Bağıl hata yaklaşık yüzde 8’dir; paydada birbirine çok yakın \(5{,}44\) ve \(5{,}40\) sayılarının farkı alındığı için üç basamaklık hassasiyetin çoğu kaybolmuştur. \(\blacksquare\)
Alıştırma 2.3 (Arktanjant Serisiyle π Yaklaşımı) \(\pi = 4\left( \arctan \frac{1}{2} + \arctan \frac{1}{3} \right)\) eşitliği ile verilen \(\pi\) sayısına, \(\arctan x\) fonksiyonunun Maclaurin serisinin ilk üç terimini kullanarak yaklaşımda bulununuz; oluşan mutlak ve bağıl hataları hesaplayınız. İşlemlerde virgülden sonra 7. basamağa yuvarlayınız.
Çözüm
Eşitlik. \(a = \arctan \frac{1}{2}\) ve \(b = \arctan \frac{1}{3}\) olsun. Tanjantın toplam formülüyle
\[\tan(a + b) = \frac{\frac{1}{2} + \frac{1}{3}}{1 - \frac{1}{2} \cdot \frac{1}{3}} = \frac{\frac{5}{6}}{\frac{5}{6}} = 1\]
olur. \(a, b \in \left(0, \frac{\pi}{4}\right)\) olduğundan \(a + b \in \left(0, \frac{\pi}{2}\right)\)’dir ve \(a + b = \frac{\pi}{4}\) bulunur.
Yaklaşım polinomu. \(\arctan x = x - \frac{x^3}{3} + \frac{x^5}{5} - \cdots\) serisinin (bkz. Analiz 2) ilk üç terimi
\[p(x) = x - \frac{x^3}{3} + \frac{x^5}{5}\]
polinomudur ve \(\pi \approx 4\left( p\left(\frac{1}{2}\right) + p\left(\frac{1}{3}\right) \right)\) alınır.
Polinom değerleri.
\[ \begin{aligned} p\left(\tfrac{1}{2}\right) &= \frac{1}{2} - \frac{1}{24} + \frac{1}{160} = \frac{223}{480} \approx 0{,}4645833, \\[1mm] p\left(\tfrac{1}{3}\right) &= \frac{1}{3} - \frac{1}{81} + \frac{1}{1215} = \frac{391}{1215} \approx 0{,}3218107. \end{aligned} \]
Yaklaşık değer.
\[\pi \approx 4\,(0{,}4645833 + 0{,}3218107) = 4 \cdot 0{,}7863940 = 3{,}1455760.\]
Hatalar. Mutlak hata
\[|\pi - 3{,}1455760| \approx 0{,}0039833,\]
bağıl hata
\[\frac{|\pi - 3{,}1455760|}{|\pi|} \approx 0{,}0012679\]
bulunur. Buradaki hatanın büyük kısmı kesme hatasıdır: serinin dördüncü ve sonraki terimleri atılmıştır. \(\blacksquare\)
Sonraki üç alıştırma aynı fonksiyonu kullanır:
\[f(x) = \frac{e^x - e^{-x}}{x}.\]
Alıştırma 2.4 (Bir Bölümün Sıfırdaki Limiti) \(f(x) = \dfrac{e^x - e^{-x}}{x}\) olsun. \(\displaystyle\lim_{x \to 0} f(x)\) limitini bulunuz.
Çözüm
Belirsizlik. \(x \to 0\) iken pay \(e^0 - e^0 = 0\)’a, payda \(0\)’a gider; limit \(\frac{0}{0}\) belirsizliğidir.
L’Hôpital Kuralı. Pay ve paydanın türevlerini alırız (bkz. Analiz 2):
\[\lim_{x \to 0} \frac{e^x - e^{-x}}{x} = \lim_{x \to 0} \frac{e^x + e^{-x}}{1} = 1 + 1 = 2.\]
\(\blacksquare\)
Alıştırma 2.5 (Doğrudan Hesapta Üç-Basamak Yuvarlama) \(f(x) = \dfrac{e^x - e^{-x}}{x}\) olsun. Üç-basamak yuvarlama aritmetiği kullanarak \(f(0{,}1)\) değerini hesaplayınız.
Çözüm
Üsteller. \(e^{0{,}100} = 1{,}10517\ldots\) sayısının dördüncü basamağı \(5\) olduğundan \(e^{0{,}100} \to 0{,}111 \cdot 10^{1} = 1{,}11\); \(e^{-0{,}100} = 0{,}904837\ldots \to 0{,}905\).
Fark ve bölüm.
\[f(0{,}1) \approx \frac{1{,}11 - 0{,}905}{0{,}100} = \frac{0{,}205}{0{,}100} = 2{,}05 = 0{,}205 \cdot 10^{1}.\]
Yani \(f(0{,}1) \approx 2{,}05\) bulunur. Gerçek değer \(f(0{,}1) = 2{,}003335\ldots\) olduğundan bağıl hata yaklaşık \(0{,}023\)’tür. \(\blacksquare\)
Alıştırma 2.6 (Maclaurin Polinomuyla Üç-Basamak Yuvarlama) \(f(x) = \dfrac{e^x - e^{-x}}{x}\) olsun. \(e^x\) için 3. mertebeden Maclaurin polinomunu kullanarak üç-basamak yuvarlama aritmetiği yardımıyla \(f(0{,}1)\) değerini hesaplayınız.
Çözüm
Polinomlar. 3. mertebeden Maclaurin polinomuyla
\[e^x \approx 1 + x + \frac{x^2}{2} + \frac{x^3}{6}, \qquad e^{-x} \approx 1 - x + \frac{x^2}{2} - \frac{x^3}{6}\]
olur.
Sadeleştirme. Farkta çift dereceli terimler birbirini götürür:
\[f(x) \approx \frac{\left(1 + x + \frac{x^2}{2} + \frac{x^3}{6}\right) - \left(1 - x + \frac{x^2}{2} - \frac{x^3}{6}\right)}{x} = \frac{2x + \frac{x^3}{3}}{x} = 2 + \frac{x^2}{3}.\]
Hesap. \((0{,}100)^2 = 0{,}0100\) ve \(\frac{0{,}0100}{3} = 0{,}00333\ldots \to 0{,}00333\) olduğundan
\[f(0{,}1) \approx 2 + 0{,}00333 = 2{,}00333 \to 0{,}200 \cdot 10^{1} = 2{,}00\]
bulunur. Gerçek değer \(2{,}003335\ldots\) olduğundan bağıl hata yaklaşık \(0{,}0017\)’dir. \(\blacksquare\)
Yani doğrudan hesaptaki (Alıştırma 2.5) büyük hata yöntemden değil, birbirine çok yakın \(1{,}11\) ve \(0{,}905\) sayılarının farkından gelir: baştaki basamaklar birbirini götürür ve geriye yuvarlama hatalarıyla dolu birkaç basamak kalır (anlamlı basamak kaybı). İfadeyi önce \(2 + \frac{x^2}{3}\) biçimine getirmek bu çıkarmayı ortadan kaldırır ve üç basamakla bile on dört kat daha doğru sonuç verir.
Hataların bir algoritma boyunca nasıl büyüdüğünü ve bir dizinin limitine ne hızla yaklaştığını ölçmek bir sonraki bölümün konusudur: Algoritmalar ve Yakınsama Hızı.