Programmiersprache Pascal
Relationale Operatoren
Folgende relationale Operatoren (Vergleichsoperatoren) stehen zur
Verfügung:
< kleiner als
<= kleiner oder gleich
> größer als
>= größer oder gleich
== gleich
<> ungleich
IN enthalten in
Die Operatoren werden vor allem zur Formulierung von Bedingungen innerhalb
der Befehle IF, WHILE und UNTIL verwendet.
Zulässig sind auch Anweisungen der folgenden Art:
var := term1 op term2;
Dabei ist op einer der oben aufgeführten relationalen
Operatoren.
Die Variable var erhält den Wert
-
TRUE
wenn term1 op term2 "Wahr" ist
-
FALSE
wenn term1 op term2 "Falsch" ist
Bei reellwertigen Variablen, deren Wert berechnet wird, sind Tests auf
Gleichheit bzw. Ungleichheit wegen möglicher Rundungsfehler mit
größster Vorsicht einzusetzen !
Beispiel:
PROGRAM eq_err(OUTPUT);
VAR a : ARRAY[1..11] OF REAL;
s, step : REAL;
i : INTEGER;
BEGIN
s := 0; i := 0;
step := 0.1;
REPEAT
s := s + step;
i := i + 1;
a[i] := s;
Writeln(i, ' ', a[i]);
UNTIL s = 1.0;
END.
Das Programm endet nicht wie vorgesehen nach 10 Iterationsschritten, da
auf Grund von Rundungsfehlern s den Wert 1.0 nur
näherungsweise, nicht aber exakt annimmt.
Da die Grenzen des Arrays a überschritten werden, kommt es zu
einem irregulärem Programmverhalten.
Bemerkungen:
-
Ein Wechsel zu einer anderen Variante des Datentyps REAL
beseitigt das Problem nicht.
-
Wird anstelle der Schrittweite 0.1 die Schrittweite 0.5
verwendet, dann arbeitet das Programm korrekt.
(0.5 ist als Zweierpotenz rechnerintern exakt darstellbar)
Siehe auch:
Numerische Effekte
P. Böhme, 02.10.1996