4 Haziran 1996’da Ariane 5 roketinin ilk uçuşu pek iyi gitmedi.Kalkıştan 40 saniye sonra devasa roket aniden uçuş yolundan saptı ve patladı.
Bunun nedeni küçük bir yazılım hatasıydı: 64 bit kullanılarak temsil edilen kayan noktalı sayı, 16 bitlik işaretli tam sayıya dönüştürülmüştü.
Ancak sayı, 16 bitin temsil edebileceği maksimum sayı olan 32.767’den büyük olduğundan dönüştürme başarısız oldu.
Bu taşma hatası, yazılımın hata ayıklama verilerini, roketin motorlarını kontrol etmek için kullanılan hafıza alanına boşaltmasına neden oldu.
Yedek bilgisayar da daha iyisini yapamadı, bunun sonucunda roket kontrolü kaybetti ve patladı. Bu basit matematik hatalarının nelere yol açabileceğine dair sadece bir örnek…
Uçaklardaki hesaplamalar da çok hassas
2015 yılında yapılan testlerde, benzer bir taşma hatası, Boeing 787 uçaklarının jeneratör kontrol ünitelerinin 248 gün boyunca sürekli açık kalması durumunda elektriğini kesebileceğini ortaya çıkardı.
Bu koşullar altında yazılım sayaçları 2.147.483.647’ye ulaşıyor; bu, 32 bitlik imzalı bir kayıt için maksimum değer anlamına geliyor. Yazılım maksimum değere ulaştığında ise kendini kapatıyor.
Ancak uçakların bilgisayarlarını kapatıp yeniden açmak, tekrar çalışmalarını sağlamak için sayacı sıfırlıyordu. Neyse ki bu durum, şimdiye kadar felaketle sonuçlanmadı.
Bunun gibi taşma hataları yuvarlama hatalarına benzese de aralarında ince bir fark var. Yuvarlama hatası, bir sayının çok büyük olması yerine, genellikle yanlış bir şekilde hesaplanıp ikili olarak saklanması durumunda ortaya çıkar.
Örneğin, bazı hesaplamaların sonuçları irrasyonel sayılardır: Pi sayısı (3,14159265…) gibi. Hiçbir zaman bitmez, bu yüzden Pi sayısını 3,14 gibi yaklaşık olarak söyleriz.
Ondalık sistemde 2/3 gibi basit hesaplamalar bile tam olarak yazılamaz ve ikili sistemde 0,667’ye eşdeğer olması gerekebilir.
Yuvarlama hataları füzelerin kaderini belirleyebilir
Bu tür hataların en meşhur örneklerinden biri Körfez Savaşı’nda yaşandı. Gelen bir Scud füzesini durdurmak için Patriot füzesi fırlatıldı.
Ancak fırlatılan füze, karşıdan gelen füzeyi durdurmak yerine bir kışlaya çarptı ve 28 askerin ölümüne yol açtı. Bunun nedeni, takip sistemindeki birikmiş olan yuvarlama hatasıydı.
Olayın ardından yapılan incelemeler, bu hatanın, bilgisayar aritmetik hataları nedeniyle önyüklemeden bu yana geçen sürenin yanlış hesaplanması olduğu ortaya çıktı.
Sistem, zamanı 0.1 saniyelik kesirler olarak hesaplıyordu, ancak bu değer, sürekli olarak birikerek zamanla büyüyen bir hata oluşturdu.
Sistemin uzun süre açık kalması (100 saatten fazla), bu yuvarlama hatasının önemli bir sapmaya yol açmasına neden oldu.
Bu trajik olayın ardından, Patriot sistemlerinde yazılım güncellemeleri yapıldı ve benzer hataların önlenmesi için ek kontroller getirildi.
Sleipner A platformunun batması olayı
23 Ağustos 1991’de Norveç’in Stavanger kenti yakınlarındaki Gandsfjorden’de Sleipner A açık deniz platformunun batması, yaklaşık bir milyar dolarlık kayba yol açtı.
Sleipner A platformu, Kuzey Denizi’nde petrol ve gaz üretiyor ve 82 m su derinliğinde deniz yatağında destekleniyordu.
24 hücreden oluşan ve toplam taban alanı 16 bin metrekareolan, basit bir hata yüzünden battı.
Kazanın hemen ardından platformun sahibi Norveçli petrol şirketi Statoil, bir araştırma grubu görevlendirdi.
Soruşturmada, kaybın hücre duvarındaki bir arızadan kaynaklandığı, bunun sonucunda ciddi bir çatlak ve pompaların baş edemediği bir sızıntı meydana geldiği belirlendi.
Kazanın, inşaat aşamasındaki basit bir matematik hatası nedeniyle kayma gerilmelerinin eksik tahmin edilmesi sonucu oluştuğu ortaya çıktı. Söz konusu hata, beton duvarlardan bazılarının yeterinde kalın yapılmamasına yol açtı.