Beispiel (7)


Korrigiertes Programm:

INTEGER q, z, a
READ z
LOOP a <= 0 TO 181
   q <= a^2
   IF (a+1)^2 > z THEN LEAVELOOP
ENDLOOP
WRITE q

Test des Programms mit z = 32767:

      ...
182. Durchlauf: a = 181
               Zuweisung: q = 32761
               Abfrage: 33124 > 32767 ?
               Antwort: Nein (!!)

Ergebnis:

Falsch!! Speicherplatz für den Ausdruck (a+1)^2 ist nur 16 Bit lang (Zahlen von -32768 bis 32767).
Die Zahl 33124 ist also nicht darstellbar und ist i.a. sogar negativ (-32412).

Korrektur des Programms: Umformung mit Hilfe von (a+1)^2 = a^2 + 2*a + 1


Ingolf Giese