Ein Gleitkommafehler, der einen Schaden von einer halben Milliarde verursachte

Wenn Sie jemals ein bisschen programmiert haben, müssen Sie den Begriff Fließkomma kennen. Einer der am meisten vernachlässigten und potenziell gefährlichen Fehler, auf den man stößt, ist der Gleitkommafehler.

Ich wette, ein Programmierer muss den Gleitkommafehler mindestens einmal in seinem Leben gesehen haben. Aber wie viel Schaden kann ein Gleitkommafehler anrichten? Fragen Sie die Europäische Weltraumorganisation, die dank eines Fließkomma-Fehlers einen Aufwand von über einem Jahrzehnt und 500 Millionen Dollar verloren hat.

Die Geschichte von Ariane 5:

Am 4. Juni 1996 scheiterte der Erstflug der Trägerrakete Ariane 5. Nur etwa 40 Sekunden nach Beginn der Flugsequenz, in einer Höhe von etwa 3700 m, bog der Werfer von seiner Flugbahn ab, löste sich auf und explodierte.

Der Ausfall der Ariane 501 wurde durch den vollständigen Verlust der Führungs- und Lageinformationen 37 Sekunden nach dem Start der Zündsequenz des Hauptmotors (30 Sekunden nach dem Abheben) verursacht. Dieser Informationsverlust war auf Spezifikations- und Entwurfsfehler in der Software des Trägheitsreferenzsystems zurückzuführen.

Die interne SRI * -Software-Ausnahme wurde während der Ausführung einer Datenkonvertierung von 64-Bit-Gleitkommazahlen in 16-Bit-Ganzzahlen mit Vorzeichen verursacht. Die konvertierte Gleitkommazahl hatte einen Wert, der größer war als der Wert, der durch eine 16-Bit-Ganzzahl mit Vorzeichen dargestellt werden konnte.

Also, was genau ist passiert?

Eine 64-Bit-Gleitkommazahl, die sich auf die horizontale Geschwindigkeit der Rakete in Bezug auf die Plattform bezieht, wurde in eine 16-Bit-Ganzzahl mit Vorzeichen umgewandelt. Die Zahl war größer als 32.767, die größte in einer 16-Bit-Ganzzahl mit Vorzeichen speicherbare Ganzzahl, und daher schlug die Konvertierung fehl.

Die Software löste schließlich eine Systemdiagnose aus, bei der die Debugdaten in einen Speicherbereich abgelegt wurden, der von den Programmen zur Steuerung der Raketenmotoren verwendet wurde. Gleichzeitig wurde die Steuerung auf einen Backup-Computer umgestellt, der leider die gleichen Daten hatte.

Dies wurde falsch interpretiert, da starke Korrekturmaßnahmen erforderlich waren und die Motoren der Rakete bis an die Grenzen ihrer Lagerungen geschwenkt waren. Es kam zu einer Katastrophe.

Die Codierung erfolgte in Ada . Die letzte Zeile ist die, die die Tragödie verursacht hat:

 L_M_BV_32: = TBD.T_ENTIER_32S ((1.0 / C_M_LSB_BV) * G_M_INFO_DERIVE (T_ALG.E_BV)); wenn L_M_BV_32> 32767, dann P_M_DERIVE (T_ALG.E_BV): = 16 # 7FFF #; elsif L_M_BV_32 <-32768 dann P_M_DERIVE (T_ALG.E_BV): = 16 # 8000 #; sonst P_M_DERIVE (T_ALG.E_BV): = UC_16S_EN_16NS (TDB.T_ENTIER_16S (L_M_BV_32)); ende wenn; P_M_DERIVE (T_ALG.E_BH): = UC_16S_EN_16NS (TDB.T_ENTIER_16S ((1.0 / C_M_LSB_BH) * G_M_INFO_DERIVE (T_ALG.E_BH)); 

Weitere Lektüre:

Diese Links könnten nützlich sein, wenn Sie mehr über diesen teuren Gleitkomma-Fehlerfall erfahren möchten:

//www.ima.umn.edu/~arnold/disasters/ariane.html //www.intel.com/standards/floatingpoint.pdf //www.theinquirer.net/inquirer/news/1047844/floating-point-bugs -explode //en.wikipedia.org/wiki/Cluster_(spacecraft) //www.ima.umn.edu/~arnold/disasters/ariane5rep.html //www.around.com/ariane.html

Empfohlen

Überwachen Sie die Internetgeschwindigkeit mit der Netspeed-Applet-Anzeige in Ubuntu 14.04
2019
So installieren Sie Sublime Text 3 unter Ubuntu Linux
2019
Antergos Linux arbeitet an einem eigenen App Store
2019