CompareValue

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.