Na, mit LaTex sieht das doch gleich viel besser aus.
Das 'geniale' Verfahren von Gammatester ist gar nicht so genial, weil es unnötigen Code produziert und am Thema vorbei geht. Wir haben es hier mit einer Fallunterscheidung zu tun, die in der Mathematik auch entsprechend gekennzeichnet wird (große öffnende geschweifte Klammer und dann untereinander die Fälle). Entsprechend sollte der Pseudocode auch aussehen:
Delphi-Quellcode:
Case sign(Value) of
-1 : ... ;
0 : ... ;
+1 : ... ;
End;
oder so (das berücksichtigt sogar die ist-gleich-Null Problematik);
Delphi-Quellcode:
Case CompareValue (Value,0) of
-1 : ... ;
0 : ... ;
+1 : ... ;
End;
Ich finde das Tutorial wirklich gut, denn es zeigt, wie knifflig scheinbar banale Dinge werden können, wenn man sie richtig angeht.
Da die begrenzte Genauigkeit und die damit verbundenen Probleme ausführlich behandelt werden (das ist ja der Kern der Abhandlung), müsste Wolfgang folgerichtig (und um das Thema abzurunden) auch auf die 'Ist-Gleich-Null' Problematik näher eingehen.
Z.B. Führt folgende einfache Schleife unsinnigen Ergebnissen:
Delphi-Quellcode:
Var
x : Double;
Begin
x:= -0.2;
While x < 0.1 do begin
if (x<0) or (x>0) then
Writeln (x,' ist ungleich 0')
else
Writeln(x,' ist gleich 0');
x := x + 0.1;
End
End
Wir erwarten nach zwei Durchläufen die Ausgabe '0 ist gleich 0'. Das wird aber nicht passieren.
D.h. muss man eben Werte, die sehr nahe bei 0 liegen, als 0 behandeln. Dabei ist die Grenze vom gewählten Datentyp abhängig.