Forum: Programmieren allgemein
by alzaimar,
20. Dez 2005
@negaH: So logisch einfach hab ich das noch nie gesehen. :thumb:
Forum: Programmieren allgemein
by alzaimar,
19. Dez 2005
dizzy: Du weisst mehr als ich. Ich wusste nur, das 0.1 nicht exakt dargestellt ist (periodisch)... Ich hab vor 25 Jahren diese Floating-Point Macken erlebt, als unser damalige Rechner (ein HP 9845) durch einen HP300 (mit Motorola 68k) ausgetauscht wurde und die Rechnungen statt mit BCD in der wesentlich schnelleren Floating-Point Arithmetik durchgeführt wurden.
Es ist auf jeden Fall ein sehr...
Forum: Programmieren allgemein
by alzaimar,
19. Dez 2005
Einen hab ich noch: Kein Vergleich, keine 0, nur simples Addieren. Alle Zwischenergebnisse innerhalb des Wertebereiches.
Var
x : Double;
i : Integer;
begin
x:=-1;
For i:=1 to 10000 do x := x + 0.1;
For i:=1 to 10000 do x := x - 0.1;
memo.lines.add (FloatToStr(x));
end;
Forum: Programmieren allgemein
by alzaimar,
19. Dez 2005
Nee, stimmt nicht. Oder doch. äh... :gruebel:
Er meint den Wertebereich, schreibt aber etwas über Genauigkeit. Schon pervers. :stupid:
Viel hübscher ist das hier (würde ich ihm als Friedensangebot überreichen):
Var
x : Extended;
begin
x:=-0.3;
while x<0.2 do begin
Forum: Programmieren allgemein
by alzaimar,
19. Dez 2005
Rechne doch einfach mal mit der Annahme, das (3-x) = -x ist (bei Extended, wohlgemerkt).
result = x * y + (3-x) * y - y;
result = x * y + ( -x) * y - y;
result = x * y - x * y - y;
result = - y;
q.e.d