Mathias hat geschrieben:Etwas wie if Now = wert then sollte man vermeiden, weil es sein kann, dass Now nie gleich wert ist.
Bei Float-Vergleichen mache ich immer ein <= oder >= .
Bei Ganzzahlen dies auch ein Vorteil sein.
Nein, bei Gleitkomma-Vergleichen darf kein "=" auftauchen. Angenommen, du führst eine Rechnung durch und willst vergleichen, ob das Ergebnis <= 3 ist. Laut Rechnung von Hand kommt exakt 3 raus. Der Vergleich "Ergebnis <= 3" wird also als "richtig" erwartet. Aber durch div. Rundungsfehler und die Disketisierung der Gleichkommazahlen erhältst du als Ergebnis am Rechner 3.0000000000000012. Nun ist "Ergebnis <= 3" falsch.
Richtig ist, immer mit SameValue zu arbeiten:
Code: Alles auswählen
function KleinerGleich(a,b: Double; Epsilon: Double): boolean;
begin
Result := SameValue(a, b, epsilon) or (a < b);
end;