Softwarový problém raket Patriot 14. 7. 1997

Možná jste si všimli, jak jsou i tvůrci a operátoři jinak velice uspěšné americké kosmické sondy, která začátkem tohoto měsíce přistála na Marsu, překvapeni občasnými nečekanými akcemi (dočasnými přerušeními) počítačů na palubě této sondy a jejího pojízdného roveru.

Systémy tohoto typu se stávají stále komplexnější a programátoři, kteří pro ně píšou programy jsou taky jen lidé a vždycky nejsou schopni předvídat úplně všechny situace, které mohou při použití jejich programů nastat. Když se pak provádí zpětná analýza takových selhání, někdy se může i stát, že jejich příčiny, když se na ně konečně příjde, se zdají dosti triviální (třeba jde jen o volbu nějakého nevhodného zjednodušení).

Jeden takový příklad poskytuje softwarový problém raket Patriot, nasazených ve válce v Zálivu, popsaný na str. 506 matematické monografie N.J. Highama Accuracy and Stability of Numerical Algorithms (Přesnost a stabilita numerických algoritmů) vydané společnosti SIAM ve Philadelphii v r. 1996:

Jedna ze zpráv Generálního účetního (a revizního) úřadu USA začíná slovy "25. února 1991 baterie raket Patriot operující v Dhahranu v Saudské Arábii v rámci operace Pouštní bouře nebyla schopna sledovat a zničit přilétávající raketu Scud. Tato raketa Scud pak zasáhla kasárna americké armády a zabila 28 Američanů." Závěr této zprávy byl, že selhání systému Patriot bylo způsobeno nevhodnou přesností použitou v jednom místě řídícího softwaru.

Počítač řídící rakety Patriot je založen na technologii ze sedmdesátých let a používá 24-bitovou aritmetiku. Systém sleduje svůj cíl měřením času, které odražené radarové pulsy potřebují na návrat od cíle. Čas je zaznamenáván systémovými hodinami v desetinách vteřiny, v paměti se ale ukládá jako celé číslo. To se pak pro potřeby dalších výpočtů převádí na 24-bitové reálné číslo. Akumulované zaokrouhlovací chyby, které při této konverzi času vzniknou postupně posouvají "zaměřovací okno", ve kterém by se měl sledovaný cíl stále nacházet. Chyby v času se zdají být nepatrné, například po 20 hodinách nepřetržitého provozu, je akumulovaná chyba při konverzi času pouhých 0,0687 vteřiny, jenže tato chyba odpovídá posunu zaměřovacího okna o celých 137 m, což je právě hodnota, kdy se sledovaný cíl z tohoto okna dostane ven. Po 100 hodinách nepřretržitého provozu je kumulovaná chyba při měření času jen 0.3433 vteřiny, což ale odpovídá posunu zaměřovacího okna o celých 687 m, kdy je už Patriot namířen někam úplně jinam, než se cíl ve skutečnosti nachází.

Tyto nedostatky byly zjištěny již 11. února 1991 při polních testech systému, který byl v nepřetržitém provozu po 8 hodin. Z extrapolace dat takto získaných opravdu vyplývalo, že po 20 hodinách provozu nebude systém Patriot schopen sledovat a zničit útočící Scudy. Software ihned na základě těchto zjištění opravený, v němž bylo nepřesné měření času vhodně kompenzováno, byl armádními činiteli schválen k použití dne 16. února 1991. Baterie, která 25. února neúspěšně chránila Dhahranskou leteckou základnu byla v době výše popsaného útoku v nepřetržitém provozu již více než 100 hodin. Modifikovaný software dorazil do Dhahránu bohužel až 26. února ...

Přitom mě napadlo, že by možná pomohlo vydat hned po 11. února příkaz k přerušení operace všech postižených systémů Patriot vždy po asi sedmi hodinách nepřetržité činnosti na pár vteřin, aby se ta naakumulovaná zaokrouhlovací chyba vynulovala.