ich habe schon jahrzehntelang Floatingpoints in einigen Komponenten und bisher auch noch nie Probleme gehabt.
Nachdem ich aber grade etwas in Lazarus gestöbert habe, kamen mir Zweifel und so dachte ich mir,
da frage ich mal in die Runde.
Es gibt ja keine unendliche Genauigkeit bei Floats und man sollte Floats "eigentlich" auch nie auf "Gleichheit" prüfen.
Die Genauigkeit, was ich bis eben auch noch garnicht wusste, ist in "Epsilon" festgelegt.
Epsilon befindet sich in TDoubleHelper.
https://www.freepascal.org/docs-html/rt ... elper.html
Jetzt die eigentliche Frage: Wie macht man es richig um auf Gleichheit bzw. auf Null zu prüfen ?
Dazu ein Minitest Code:
Code: Alles auswählen
Type TMyTest = class(TComponent)
private
FMin : Double;
procedure SetMin(value:Double);
published
property Min : Double read FMin write SetMin;
end;
procedure TMyTest.SetMin(value:Double);
begin
if value = Min then Exit; { entweder so }
if SameValue(Min,value) then exit; { oder so ??? }
if value = 0 then value:=1; { entweder so }
if isZero(value) then value:=1; { oder so }
FMin:=value;
end;
Macht das einen Unterschied ? sollte ich doch lieber meinen Code anpassen ?
für Infos bzw. Anregungen wäre ich euch dankbar.