패트리어트 미사일의 실패
double 타입의 부정확성 때문에 이라크 스커드 미사일을 격추하는 데 실패했고 병사 28명이 목숨을 잃었다고 하네요..
영문 원문
http://www-users.math.umn.edu/~arnold//disasters/patriot.html
구글 번역.
애국자 미사일 실패
걸프전 기간 인 1991 년 2 월 25 일 사우디 아라비아의 다란 (Dharan)에있는 미국 패트리어트 미사일 (Patriot Missile) 전지가 들어 와서 이라크 스커드 미사일을 추적하지 못했다. 스커드는 미군 병영을 공격 해 28 명의 병사를 살해하고 약 100 명의 다른 사람들을 다쳤습니다.
사우디 아라비아 다란 (Dhahran)의 GAO / IMTEC-92-26 , 패트리어트 미사일 방어 ( Defile : Patriot Missile Defense) 라는 시스템 문제로의 소프트웨어 문제가 실패 의 원인에 대해보고했다. 원인은 컴퓨터 산술 오류로 인해 부팅 이후 시간이 부정확하게 계산 된 것입니다. 특히, 시스템의 내부 클럭으로 측정 한 초의 10 분의 1 초를 1/10로 곱하여 시간을 초 단위로 나타냅니다. 이 계산은 24 비트 고정 소수점 레지스터를 사용하여 수행되었습니다. 특히 비 종결 2 진 확장이있는 값 1/10은 기수 점 다음 24 비트에서 잘립니다. 작은 초핑 오류는 10 분의 1 초의 시간을 제공하는 많은 수로 곱해질 때 심각한 오류를 초래했습니다. 사실, 애국자 배터리는 약 100 시간이 걸렸으며 쉬운 계산은 확대 된 초핑 오류로 인한 결과 시간 오차가 약 0.34 초라는 것을 보여줍니다. (숫자 1/10은 1/2 4 +1/2 5 +1/2 8 +1/2 9 +1/2 12 +1/2 13 + ....과 같습니다. 즉, 1의 2 진 확장 / 10은 0.0001100110011001100110011001100 .... 이제 애국자의 24 비트 레지스터는 0.00011001100110011001100의 오차를 0.0000000000000000000000011001100 ... 2 진수, 즉 약 0.000000095의 십진수로 저장했습니다 .100 시간에 1/10 초 수를 곱하면 0.000000095 × 100이됩니다. × 60 × 60 × 10 = 0.34). 스커드는 약 1,676m / s의 속도로 여행하기 때문에이 시간에는 반 킬로미터 이상을 여행합니다. 이것은 들어오는 스커드가 애국자가 추적 한 "레인지 게이트"밖에 있었을만큼 충분히 컸다. 역설적이게도 잘못된 시간 계산이 코드의 일부에서 개선되었지만 모든 부분이 개선되지 않았다는 사실은 여기 에서 논의 된 것처럼 부정확성이 취소되지 않았기 때문에 문제에 기여했습니다.
다음 단락은 GAO 보고서에서 발췌 한 것입니다.
Scud가 다음에 나타날 범위 게이트의 예측은 Scud의 알려진 속도와 마지막 레이더 탐지 시간의 함수입니다. 벨로 시티는 정수와 십진수로 표현할 수있는 실수입니다 (예 : 시간당 3750.2563 ... 마일). 시간은 시스템의 내부 클럭에 의해 10 분의 1 초 단위로 계속 유지되지만 정수 또는 정수 (예 : 32, 33, 34 ...)로 표시됩니다. 시스템이 실행되는 시간이 길수록 시간을 나타내는 숫자가 커집니다. Scud가 다음에 나타날 곳을 예측하려면 시간과 속도를 모두 실수로 표현해야합니다. 패트리어트 컴퓨터가 계산을 수행하는 방식과 레지스터가 단지 24 비트 길이라는 사실 때문에 정수에서 실수로 시간을 변환하는 것이 더 이상 24 비트 일 수는 없습니다. 이 변환으로 인해 정밀도가 떨어지므로 정확하지 않은 시간 계산이 발생합니다. 이 부정확성이 레인지 게이트의 계산에 미치는 영향은 목표의 속도에 직접 비례하며 시스템의 길이는 계속 실행됩니다. 결과적으로, 애국자가 오랜 기간 동안 지속적으로 실행 된 후에 전환을 수행하면 범위 게이트가 대상의 중앙에서 벗어나 이동하여 대상 (이 경우 Scud)이 성공적으로 가로 챌 가능성이 줄어 듭니다.