Verweis: | Max Min Mean |
Uses: | Math |
Eingabe: | Fließkomma1,Fließkomma2,Toleranz(optional)(single,double,Extended) |
Ausgabe: | TValueRelationship(integer) |
Funktion: | Vergleicht 2 Gleitkommawerte mit Toleranzangabe |
Beispiel 1
Vorbereitung: Erstellen sie eine IDE Anwendung und ziehen Sie einen TButton auf die Form. Binden Sie die Unit Math mit der Uses-Klausel in die Anwendung ein. Doppelklicken sie auf den Button und ersetzen Sie das Ereignis durch folgenden Quelltext:
procedure TForm1.Button1Click(Sender: TObject);
var
Gleitkomma1, Gleitkomma2: single;
begin
Gleitkomma1 := 30;
// Einmal hinrechnen
Gleitkomma2 := 30 / 7 / 13 / 15 / 5;
// und wieder zurück
Gleitkomma2 := Gleitkomma2 * 91 * 75;
// Pc ist fertig mit den Nerven
if Gleitkomma1 = Gleitkomma2 then
ShowMessage('Gleitkomma1 ist genauso groß wie Gleitkomma2.')
else
ShowMessage('Gleitkomma1 und Gleitkomma2 sind ungleich.');
ShowMessage(FloatToStr(Gleitkomma1) + '<>' + FloatToStr(Gleitkomma2));
// Bei einem Vergleich hat der PC ein Problem
case CompareValue(Gleitkomma1, Gleitkomma2) of
-1: ShowMessage('G1 < G2');
0: ShowMessage('G1 = G2');
1: ShowMessage('G1 > G2');
end;
// Hier können Sie nur noch Schadenbegrenzung mit einem
// Toleranzwert dem Rechner über die Runden helfen.
case CompareValue(Gleitkomma1, Gleitkomma2, 0.0001) of
-1: ShowMessage('G1 < G2');
0: ShowMessage('G1 = G2');
1: ShowMessage('G1 > G2');
end;
end;
Mit CompareValue können Gleitkommazahlen unter Angabe einer Toleranz verglichen werden. Wenn die beiden Zahlen nahe genug beieinander liegen, gelten sie als gleich. Sie könne diesen Befehl auch ohne eine Toleranzangabe benutzen aber, eigentlich ist der Befehl nur sinnvoll wenn die Toleranz angegeben ist. Diese wird als dritter Wert an CompareValue übergeben. Der Einsatz ist auch mit Integerzahlen möglich, aber wenn dieser allein Benutzt wird blödsinnig. Allerdings in Kombination mit der Eigenschaft Customsort durchaus sinnvoll.
TValueRelationship = -1..1;
const
EqualsValue = 0;
LessThanValue = Low(TValueRelationship);
GreaterThanValue = High(TValueRelationship);
Hier haben wir einen Ausschnitt aus der Unit Math.
TValueRelationship ist eigentlich nur ein Ganzzahlen Array von -1 bis +1. Diese Funktion ist nur in Kombination mit Sortierallgorythmen interessant. So erwartet zum Beispiel StringList.CustomSort einen Rückgabewert diesen Typs.