灯油対愛国者:アメリカ軍のプログラマーが適切に丸める方法を学んだ方法

1991 年2月11日、パトリオットプロジェクトオフィスは、パトリオットミサイルシステムの欠陥に関するイスラエルのデータを受け取りました。 彼らは、システムが8時間動作すると、20%の汚れが発生することを発見しました。 彼らは、20時間の操作後、システムがオーバーシュートを開始しすぎて、弾道ミサイルをキャプチャ、追跡、およびヒットできなくなると考えました。 米軍は発見の重要性を考慮せず、このシステムはポータブルで短期的な防衛作戦用に設計されており、8時間以上システムを使用することはないだろうと述べた。



バグ修正は2月16日にリリースされましたが、戦争であったため、軍事装備のすべてのユニットに統合するのに時間がかかりました。



2月21日、軍はシステムが「長期間」機能しないように指示を出しました。 軍隊は、それがいつまで続くかを指定しませんでした。



2月25日、サウジアラビアのダーランで、弾道ミサイル「 灯油 」(別名R-17、別名スカッド)が兵舎に飛んでアメリカ人を訪問しました。 パトリオットミサイルシステムがソフトウェアエラーのために逃したため、28人が負傷した96人を殺しました。



2月26日、バグ修正がDahranに配信されました。













R-17 (米国およびNATO防衛軍の分類-SS-1c Scud B、輸出指定R-300、非公式-「ケロシン」)-ソビエトの長期貯蔵燃料コンポーネント上の液体単段弾道ミサイル。



写真R-17






軍事検査R-17ミサイルは、砂漠の嵐の操作中にMIM-104パトリオット防空システムの砂漠で撃downされました





MIM-104「パトリオット」 (生まれたMIM-104パトリオット、英語から翻訳-パトリオット)-アメリカ陸軍とその同盟国が使用するアメリカの対空ミサイルシステム(SAM)。



写真愛国者










AN / MPQ-53レーダーセットの詳細図。 垂直コンポーネントの前面にある円形パターンは、それぞれ直径約39ミリメートル(1.535インチ)の5,000を超える個別の要素で構成されるシステムのメインフェーズドアレイです。





PAC-3ミサイル発射装置、各キャニスターに4つのミサイルがあることに注意してください





ターゲットの管理を担当するソフトウェアにバグがありました。これにより、時間とともに内部クロックが時間の真の値から徐々に離れていきました。



システム時間は、10分の1秒の精度で整数として24ビットレジスタに保存されました。 したがって、0.1秒の各測定で、一部の時間は「失われました」。 計算では、データは実数に変換されました。

[ ソース ]



1/10は1/2 4 +1/2 5 +1/2 8 +1/2 9 +1/2 12 +1/2 13 + ...です。つまり、バイナリ分解は1/10 = 0.0001100110011001100110011001100 ...です。したがって、24ビット代わりに、Patriotシステムのレジスタは0.00011001100110011001100を代わりに保存し、バイナリ用語で0.0000000000000000000000011001100 ...、または10進数で約0.000000095に等しいエラーを発生させました。 100時間の操作の場合、0.000000095×100×60×60×10 = 0.34秒



「ケロシンカ」は毎秒1676メートルの速度で飛行し、0.54キロメートル以上0.34秒で通過します。 これは愛国者の敗北の半径をこっそり抜けるのに十分以上です。 時間の曲線計算がプログラムの一部で修正されたが、すべてではなかったのは面白いです。



このソフトウェアは15〜20年前にアセンブラで作成され、その後さまざまなプログラミングチームによって何度か修正されています。



パトリオットシステムの問題が特定されているレポートのスライド:















黄金のルール





PVSの記事: 32ビットコードと64ビットコードで異なる結果が得られるのはなぜですか?

habraauthorからの記事(229コメント): 浮動小数点数を操作する際のバイナリ演算の致命的なエラー



パトリオットについてもっと読む





おわりに



私たちは、ソフトウェアの信頼性の問題に人々の注意を引きたいと思っています。 プログラムは長い間、Fortranやコンピューターゲームの科学者の奇妙で不可解な計算だけではありません。 これが私たちを長い間、そしてどこでも取り囲んでいるものです。



深刻なバグは、かつては狭い特定の領域-平和ロケット科学( Ariane 5 )および軍事ロケット科学( Patriot )で有害でした。 現在、プログラムエラーが発生すると、コンピューターに座っているだけでなく、車に座っている( トヨタ )か、病院に行っている( Therac-25 )こともあります。 私たちは、プログラマーの側でバグと戦う人の一人です。 PVS-Studio静的コードアナライザーを開発しまし 。これにより、コーディング段階でもC、C ++、C#プログラムの多くのエラーを検出できます。 そして、この機会に、2016年10月25日からWindowsだけでなく、このアナライザーのLinuxバージョンも利用できるようになることを思い出したいと思います。



All Articles