Ana içeriğe atla

Matematiğin Önemi · Günümüz

Küçük hesap hataları, büyük sonuçlar: Birim, taşma ve yuvarlama

Mars Climate Orbiter'da birim karışıklığı, Ariane 5'in ilk uçuşunda sayı taşması, Patriot sisteminde biriken yuvarlama hatası. Resmî inceleme raporlarıyla uyumlu olarak, üç olayın arkasındaki matematik.

Yazan: matematikce editörlüğü 6 dk okuma

Solda iki farklı birimle bölmelenmiş cetveller ve gezegene planlanandan yakın geçen bir yol; ortada sınırlı sayıda bit hücresi ve başa dönen bir sayı halkası; sağda zamanla açılan küçük bir hesap farkı.

Bir hesapta birimi yazmayı unutmak, bir sayıyı fazla kısa bir kutuya sığdırmaya çalışmak ya da 0,1’i bir bilgisayarda “yaklaşık” saklamak… Kâğıt üzerinde küçük görünen bu ayrıntılar, bazı mühendislik projelerinde çok pahalı sonuçlar doğurdu. Bu yazıda resmî inceleme raporları yayımlanmış üç olaya bakacağız: 1999’da kaybedilen Mars Climate Orbiter uzay aracı, 1996’da ilk uçuşunda başarısız olan Ariane 5 roketi ve 1991’de Dhahran’da bir hedefi izleyemeyen Patriot hava savunma sistemi.

Amacımız suçlu aramak ya da olayları dramatize etmek değil. Her olayın arkasındaki matematiksel fikri, kendi basit sayısal örneklerimizle anlamaya çalışacağız. Şunu da baştan belirtelim: Üç olayda da tek bir “hesap hatası” değil, bu hatanın fark edilmesini engelleyen süreç eksiklikleri de rol oynadı.

Mars Climate Orbiter (1999): Birimler karışınca

Mars Climate Orbiter, Mars’ın iklimini incelemek için 11 Aralık 1998’de fırlatıldı. Aylar süren yolculuğun sonunda, 23 Eylül 1999’da gezegenin çevresinde yörüngeye girmek için motorunu çalıştırdı. Araç Mars’ın arkasına geçtikten sonra onunla bir daha iletişim kurulamadı.

Olayı inceleyen kurul, temel nedenin yerdeki navigasyonla ilgili bir yazılım parçasında İngiliz ölçü birimlerinin metrik birimlere çevrilmemesi olduğunu açıkladı. Uzay aracının yönünü ayarlamak için yapılan küçük itici ateşlemelerinin etkisi itki (impuls) adı verilen bir nicelikle hesaplanır. Bir yazılım bu değeri pound-kuvvet saniye (lbf·s) cinsinden üretti. Bu veriyi kullanan navigasyon hesapları ise değeri newton saniye (N·s) cinsinden bekliyordu.

İki birim arasındaki ilişki şudur:

1 lbf·s ≈ 4,45 N·s

Kendi uydurduğumuz sayılarla ne olduğunu görelim. Bir ateşlemenin gerçek itkisi 10 lbf·s olsun.

  1. Doğru dönüşüm: 10 × 4,45 = 44,5 N·s
  2. Birim yazılmadan aktarılan değer: 10 “N·s” gibi okunur.
  3. Hesaba katılan etki gerçeğin yaklaşık 4,45’te biri kadar olur.

Tek bir ateşlemede bu fark çok küçük bir yol sapması üretir. Ancak aylar boyunca tekrarlanan ateşlemelerde küçük sapmalar birikti. Aracın Mars’ın yaklaşık 226 km üzerinden geçmesi planlanmıştı; sonradan yapılan hesaplar, gerçek yolun onu yaklaşık 57 km yüksekliğe kadar indirdiğini gösterdi. Bu yükseklik, aracın atmosferde zarar görmesine yetecek kadar alçaktır.

Kurul, birim hatasının yanında başka etkenleri de sıraladı: ekipler arası iletişimin zayıflığı, yol sapmasına dair işaretlerin yeterince incelenmemesi ve doğrulama süreçlerindeki boşluklar.

Matematik dersi: Bir sayı, birimi olmadan eksiktir. Fizik derslerinde “birimleri de işleme katın” denmesinin nedeni tam olarak budur.

Ariane 5, 501. uçuş (1996): Sayı kutuya sığmayınca

Avrupa’nın yeni ağır roketi Ariane 5, ilk uçuşunu 4 Haziran 1996’da insansız olarak yaptı. Ana motorların ateşlenmesinden yaklaşık 37 saniye sonra, yani kalkıştan yaklaşık yarım dakika sonra roket yönünü kaybetti, rotasından saptı ve yaklaşık 3700 metre yükseklikte parçalandı. Uçuşta insan bulunmuyordu.

Olayı inceleyen kurulun ortaya koyduğu neden şöyleydi. Roketin konumunu ve hareketini ölçen inersiyal referans sisteminin yazılımı, büyük ölçüde önceki Ariane 4 roketinden alınmıştı. Bu yazılımdaki bir işlem, yatay hızla ilişkili bir değeri 64 bitlik ondalıklı sayı biçiminden 16 bitlik işaretli tam sayıya çeviriyordu. Ariane 5’in yolu, Ariane 4’ünkinden farklıydı ve uçuşun başında yatay hız değerleri çok daha büyük çıktı. Değer 16 bitlik alana sığmadı, yazılımda bir hata durumu oluştu ve birim çalışmayı durdurdu. Yedek birim aynı yazılımı taşıdığı için o da bir hesaplama döngüsü önce aynı nedenle durmuştu.

İşin dikkat çekici yanı, bu hesabı yapan işlevin kalkıştan sonra hiçbir görevinin olmamasıydı. Ariane 4’teki bir ihtiyaç yüzünden kalkıştan sonra yaklaşık 40 saniye daha çalışacak biçimde bırakılmıştı.

16 bit neden sınırdır?

Bir bit 0 ya da 1 değerini alır. 16 bit, 2¹⁶ = 65 536 farklı durum demektir. İşaretli tam sayılarda bu durumlar yarı yarıya eksi ve artı sayılara paylaştırılır:

−32 768 ≤ sayı ≤ 32 767

Kendi örneğimizle deneyelim. Bir ölçüm değeri 20 000 ise sorun yoktur. Değer 40 000’e çıkarsa bu aralığa sığmaz. Farklı sistemler bu durumda farklı davranır. Bazıları hata verip durur; Ariane 5’teki yazılımda olan buydu. Bazıları ise sayıyı sessizce “başa sarar”. Böyle bir sistemde 32 767’ye 1 eklemek −32 768 sonucunu verir. Bu davranış, bir arabanın kilometre sayacının 99 999’dan 00 000’a dönmesine benzer.

Matematik dersi: Her sayı gösteriminin bir aralığı vardır. Bir sistemi yeni bir koşula taşırken değerlerin eski aralıkta kalıp kalmadığını yeniden kontrol etmek gerekir.

Patriot, Dhahran (1991): Küçük bir yuvarlama, uzun bir süre

25 Şubat 1991’de, Körfez Savaşı sırasında Suudi Arabistan’ın Dhahran kentindeki bir Patriot hava savunma bataryası, gelen bir Scud füzesini izleyip önleyemedi. Füze bir askerî kışlaya isabet etti ve 28 ABD askeri hayatını kaybetti. Olayın ardından yapılan resmî inceleme, nedenin sistemin silah kontrol bilgisayarındaki bir yazılım sorunu olduğunu ortaya koydu.

Sistem, açıldığı andan itibaren geçen süreyi saniyenin onda biri cinsinden bir tam sayı olarak sayıyordu. Hedefi izlemek için bu sayı 1/10 ile çarpılarak saniyeye çevriliyordu. Sorun, 1/10 sayısının bilgisayarın kullandığı ikili sistemde tam olarak yazılamamasıydı.

0,1 ikili sistemde neden sonsuz?

Onluk sistemde 1/3 = 0,3333… sonsuza kadar sürer, çünkü 3 sayısı 10’un bir böleni değildir. İkili sistemde de payda 2’nin kuvveti değilse benzer durum oluşur. 1/10’u ikili sisteme çevirmek için sayıyı sürekli 2 ile çarpıp tam kısmı yazalım:

  1. 0,1 × 2 = 0,2 → 0
  2. 0,2 × 2 = 0,4 → 0
  3. 0,4 × 2 = 0,8 → 0
  4. 0,8 × 2 = 1,6 → 1
  5. 0,6 × 2 = 1,2 → 1
  6. 0,2 × 2 = 0,4 → 0 ve döngü başa döner.

Sonuç: 0,1 = 0,000110011001100… (ikili). Sistem bu sayıyı 24 bitlik bir alanda tuttuğu için bir noktadan sonrasını kesiyordu. Kesilen kısım yaklaşık 0,000000095’tir. Her saniyenin onda biri için bu kadar küçük bir kayıp oluşuyordu.

Hata nasıl birikti?

Tek başına 0,000000095 önemsiz görünür. Ama bu küçük kayıp, sayılan her onda bir saniyede tekrar eder:

  1. 100 saat = 100 × 3600 = 360 000 saniye
  2. Saniyenin onda biri cinsinden: 360 000 × 10 = 3 600 000
  3. Toplam fark: 3 600 000 × 0,000000095 ≈ 0,34 saniye

Batarya o sırada 100 saati aşkın süredir kesintisiz çalışıyordu. Hesaplanan zaman farkı yaklaşık 0,34 saniyeydi. Çok hızlı giden bir hedef için bu fark, sistemin hedefi aradığı bölgenin yaklaşık 687 metre kaymasına yol açtı. Hedef bu yüzden izlenemedi. Sorunun uzun süreli çalışmada büyüdüğü daha önce fark edilmişti; düzeltilmiş yazılım ise Dhahran’a olaydan bir gün sonra ulaştı.

Matematik dersi: Yaklaşık değerlerin hatası tek başına küçük olabilir. Aynı işlem milyonlarca kez tekrarlanırsa hata toplanır. Hata payını, işlemin kaç kez tekrarlanacağıyla birlikte düşünmek gerekir.

Üç olayın ortak noktası

Üç olay farklı alanlardan gelse de matematiksel çekirdekleri lise düzeyindedir:

Olay Matematiksel fikir Okuldaki karşılığı
Mars Climate Orbiter Birim dönüşümü Oran-orantı, fizikte birim analizi
Ariane 5 Sınırlı sayı aralığı Üslü sayılar (2¹⁶), sayı kümeleri
Patriot Yuvarlama ve hata birikimi Ondalık açılımlar, yaklaşık hesap

İncelemelerden çıkan ortak ders de benzerdir. Hataları yakalamak için bağımsız kontrol, açık belgeleme ve varsayımların yeni koşullarda yeniden sınanması gerekir. Bir yazılımı ya da bir hesabı “önceden çalışıyordu” diye yeni bir duruma olduğu gibi taşımak, üç örnekte de risk oluşturmuştur. Bir modelin varsayımlarını açıkça yazmanın neden önemli olduğunu matematiksel modelleme yazımızda ayrıca ele aldık.

Bugün nerede karşımıza çıkar?

Bu fikirler yalnızca uzay ve savunma projelerinde değil, günlük hesaplarda da karşımıza çıkar:

  • Birçok programlama dilinde 0,1 + 0,2 işleminin sonucu tam 0,3 değil, 0,30000000000000004 gibi bir değer çıkar. Neden aynıdır: 0,1 ikili sistemde tam yazılamaz.
  • Mutfakta “fincan” ile “gram”, haritada “mil” ile “kilometre” karıştığında da aynı türden bir birim hatası yapılmış olur.
  • Bir tabloda çok büyük sayılar yanlış veri türünde saklanırsa değerler bozulabilir.

Ondalık gösterimin tarihine merak duyuyorsanız Simon Stevin ve ondalık kesirler yazımız iyi bir başlangıç olur. Bilgisayarların neyi hesaplayıp neyi hesaplayamayacağı sorusunun kökleri ise Turing makinesi yazımızda.

Kapanış

Bu üç olay, matematiğin sadece doğru formülü bilmekten ibaret olmadığını gösterir. Birimi yazmak, sayının sığacağı aralığı düşünmek ve küçük yaklaşımların zamanla nasıl büyüdüğünü hesaba katmak da matematiğin parçasıdır. Sınıfta “birimi yazmayı unutma” uyarısı küçük bir ayrıntı gibi görünebilir. Gerçek dünyada bu ayrıntılar, bir sistemin güvenle çalışmasını sağlayan temel alışkanlıklardır.

Kaynak: Anonim

  • Bilgisayar bilimi
  • Fizik
  • Modelleme
  • Sayılar
  • Teknoloji

Bu yazıda bir hata mı gördün? Düzeltme bildir; inceleyip düzeltelim.