In February 2003, shortly before the Gulf War II started, I found a very interesting article explaining what went wrong with the Patriot Missile Defense System on February 25, 1991, during Gulf War I. The failure was caused by bad numerical computing, which led to a catastrophic accumulation of round-off errors and, consequently, to a failed interception.
[ PAC-3 missile - image courtesy of Boeing ]
The Patriot missile battery at Dhahran (in Saudi Arabia) had been in operation for around 100 hours, and after such a long time the system’s internal clock had already drifted approximately 0.34 seconds. Given that a tactical ballistic missile such as the Scud is a very fast moving target (approx. 1600 m/s), a timing error of “only” 0.34 seconds was equivalent to a position error of approximately 600 meters. No wonder the Patriot missile failed to intercept the target.
An excerpt of the article, The Patriot Missile Failure:
On February 25, 1991, during the Gulf War, an American Patriot Missile battery in Dharan, Saudi Arabia, failed to track and intercept an incoming Iraqi Scud missile. The Scud struck an American Army barracks, killing 28 soldiers and injuring around 100 other people.
A report of the General Accounting office, GAO/IMTEC-92-26, entitled “Patriot Missile Defense: Software Problem Led to System Failure at Dhahran, Saudi Arabia” reported on the cause of the failure. It turns out that the cause was an inaccurate calculation of the time since boot due to computer arithmetic errors. Specifically, the time in tenths of second as measured by the system’s internal clock was multiplied by 1/10 to produce the time in seconds. This calculation was performed using a 24 bit fixed point register. In particular, the value 1/10, which has a non-terminating binary expansion, was chopped at 24 bits after the radix point.
The small chopping error, when multiplied by the large number giving the time in tenths of a second, led to a significant error. Indeed, the Patriot battery had been up around 100 hours, and an easy calculation shows that the resulting time error due to the magnified chopping error was about 0.34 seconds. (The number 1/10 equals 1/24+1/25+1/28+1/29+1/212+1/213+…. In other words, the binary expansion of 1/10 is 0.0001100110011001100110011001100…. Now the 24 bit register in the Patriot stored instead 0.00011001100110011001100 introducing an error of 0.0000000000000000000000011001100… binary, or about 0.000000095 decimal. Multiplying by the number of tenths of a second in 100 hours gives 0.000000095 × 100 × 60 × 60 × 10 = 0.34.)
A Scud travels at about 1,676 meters per second, and so travels more than half a kilometer in this time. This was far enough that the incoming Scud was outside the “range gate” that the Patriot tracked. Ironically, the fact that the bad time calculation had been improved in some parts of the code, but not all, contributed to the problem, since it meant that the inaccuracies did not cancel.
Some related links:
Tags: Gulf War, Military Technology, Missile Interception, Numerical Computing, Patriot Missile

May 5, 2008 at 3:56 pm |
That’s actually really interesting, and makes sense too!
May 5, 2008 at 11:51 pm |
In hindsight, it’s always easy and tempting to ask: how come they did not think of it? Finite numerical precision is not exactly something to neglect, in my honest opinion.