Een fout met een zwevende punt die tot een schade heeft geleid die een halve miljard waard is

Als u ooit een beetje programmeert, moet u zich bewust zijn van de term: zwevend punt. Een van de meest verwaarloosde en potentieel gevaarlijke fouten die je tegenkomt, is de zwevende-komma-fout.

Ik wed dat een programmeur de zwevende-komma-fout minstens één keer in zijn / haar leven heeft gezien. Maar hoeveel schade kan een floating point-fout veroorzaken? Vraag dat aan European Space Agency dat een inspanning van meer dan een decennium en $ 500 miljoen heeft verloren, allemaal dankzij een floating point-bug.

Het verhaal van Ariane 5:

Op 4 juni 1996 eindigde de eerste vlucht van de Ariane 5-raket in een mislukking. Slechts ongeveer 40 seconden na het begin van de vluchtsequentie, op een hoogte van ongeveer 3700 m, week de lanceerinrichting van zijn vliegroute af, brak uit en explodeerde.

Het falen van de Ariane 501 werd veroorzaakt door het volledig verlies van informatie over de geleiding en de houding 37 seconden na het begin van de ontstekingscyclus van de hoofdmotor (30 seconden na het opstijgen). Dit verlies van informatie was te wijten aan specificaties en ontwerpfouten in de software van het traagheidsreferentiesysteem.

De interne SRI * -software-uitzondering werd veroorzaakt tijdens de uitvoering van een gegevensconversie van een 64-bits drijvende komma naar een 16-bits geheel getal met teken. Het zwevende kommagetal dat werd geconverteerd had een waarde die groter was dan wat kon worden weergegeven door een 16-bits geheel getal met teken.

Wat is er precies gebeurd?

Een 64-bits drijvende-kommawaarde met betrekking tot de horizontale snelheid van de raket ten opzichte van het platform werd geconverteerd naar een ondertekend geheel getal met 16 bits. Het aantal was groter dan 32.767, het grootste gehele getal kan worden opgeslagen in een 16-bits geheel getal met teken en de conversie is mislukt.

De software leidde uiteindelijk tot een systeemdiagnose die zijn foutopsporingsgegevens naar een geheugengebied dumpte dat werd gebruikt door de programma's die de motoren van de raket leiden. Tegelijkertijd werd de besturing overgeschakeld naar een back-upcomputer die helaas dezelfde gegevens had.

Dit werd verkeerd geïnterpreteerd omdat een sterke corrigerende actie noodzakelijk was en de motoren van de raket naar de grenzen van hun bevestigingen draaiden. Ramp volgde.

De codering is gedaan in Ada . De laatste regel is de oorzaak van de tragedie:

 L_M_BV_32: = TBD.T_ENTIER_32S ((1.0 / C_M_LSB_BV) * G_M_INFO_DERIVE (T_ALG.E_BV)); indien L_M_BV_32> 32767 dan P_M_DERIVE (T_ALG.E_BV): = 16 # 7FFF #; elsif L_M_BV_32 <-32768 dan P_M_DERIVE (T_ALG.E_BV): = 16 # 8000 #; else P_M_DERIVE (T_ALG.E_BV): = UC_16S_EN_16NS (TDB.T_ENTIER_16S (L_M_BV_32)); stop als; 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))); 

Verder lezen:

Deze links zijn misschien handig, als u meer wilt lezen over deze dure drijvende-komma-foutcase:

//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

Aanbevolen

Open Source AI van Google diagnosticeert longkankertypen met extreme nauwkeurigheid!
2019
Controleer of je Linux-systeem kwetsbaar is om te schockeren en te repareren
2019
Univention Corporate Server (UCS) gebruiken als een thuisserver
2019