Luckie: So ist es eindrucksvoller, da der oft verwendete Vergleich mit 0 schon hier in die Hose geht.
Delphi-Quellcode:
Var
a,b : Double;
begin
a := 0.1;
b := a - 0.1;
if b=0 then
ShowMessage('gleich')
else
ShowMessage ('ungleich');
end;
Der Grund ist klar: 0.1 lässt sich mit Floating Point nun mal nicht 100% genau darstellen, ergo ist 0.1f <> -(-0.1)f. Folgerichtig funktioniert aber das hier (weil typisierte Konstanten mit Variablen gleichzusetzen sind):
Delphi-Quellcode:
Const
C : Double = 0.1;
Var
a,b : Double;
begin
a := C;
b := a - C;
if b=0 then
ShowMessage('gleich')
else
ShowMessage ('ungleich');
end;
Aber das hier wiederum nicht
Delphi-Quellcode:
Const
C = 0.1;
Var
a,b : Double;
begin
a := C;
b := a - C;
if b=0 then
ShowMessage('gleich')
else
ShowMessage ('ungleich');
end;
Weil Konstanten per definitionem nur Platzhalter sind.
Fazit: Man kann sich einfach nicht darauf verlassen, das "wo 0 draufsteht auch 0 drin ist".
[edit=sakura] BB-Code aktiviert. Mfg, sakura[/edit]
[edit] C in den Code eingefügt, danke Sir Thornberry[/edit]