Mariner 1 (1-2)


22. Juli 1962, Cape Canaveral/Florida
Start der ersten amerikanischen Venussonde Mariner 1
Trägerrakete Atlas-Agena B (NASA, 15. AAB-Start)

Ausschnitt aus dem FORTRAN-Programm zur Steuerung der Flugbahn der Trägerrakete:

    ...
    IF (TVAL .LT. 0.2E-2) GOTO 40
    DO 40 M = 1, 3
    W0 = (M-1)*0.5
    X = H*1.74533E-2*W0
    DO 20 N0 = 1, 8
    EPS = 5.0*10.0**(N0-7)
    CALL BESJ(X, 0, B0, EPS, IER)
    IF (IER .EQ. 0) GOTO 10
 20 CONTINUE
    DO 5 K = 1. 3
    T(K) = W0
    Z = 1.0/(X**2)*B1**2+3.0977E-4*B0**2
    D(K) = 3.076E-2*2.0*(1.0/X*B0*B1+3.0977E-4*
   *(B0**2-X*B0*B1))/Z
    E(K) = H**2*93.2943*W0/SIN(W0)*Z
    H = D(K)-E(K)
  5 CONTINUE
 10 CONTINUE
    Y = H/W0-1
 40 CONTINUE
    ...


Wesentlicher Ausschnitt aus dem FORTRAN-Programm zur Steuerung der Flugbahn der Trägerrakete:

    DO 5 K = 1. 3
    ...
  5 CONTINUE

Entscheidender Fehler:

Punkt statt Komma!

Wirkung:

    DO5K = 1.3

Wertzuweisung an eine nicht deklarierte Variable

Kein Durchlauf der (nicht vorhandenen) Schleife

Folge:

Abweichung der Trägerrakete von der vorgesehenen Flugbahn

Zerstörung der Rakete nach 290 Sekunden

Kosten dieser Wertzuweisung: $ 18.5 Millionen

Ursache:

Schlechte Programmiersprache wegen Blanks (Zwischenräume) in Namen und Zahlen erlaubt

Variablen-Deklaration nicht notwendig

Strukturierte Schleife (END DO) nicht möglich

Würde auch heute noch so fehl-funktionieren!

C ist nicht besser:

   while(x > 0,1) { ... }

=> Endlosschleife

oder:

  erg = 0;
  if (erg == 1) printf("Ergebnis: %d\n", erg),
  printf("Fertig.\n");

=> "Fertig." erscheint nicht!


Ingolf Giese