[delphi]Błąd w obliczeniach

0

Cześć!

Mam taki problem...

Piszę progra, który rysuje wykresy. I mam zmienną X i Skok typu Double.
Kiedy X:=-0.05 a skok 0.05 to w linii:

X:=X+Skok;

Zamiast X=0 mam X=-2.77...e-18... a nie zero :(

Zrobiłem test, przeniosłem tą linijkę gdzie indziej (nie w pętli). To samo. Zmieniłem typ na Extended... i zadziałało. Tzn. wynik był 0. Ale w pętli gdzie rysuje wykres... nadal -0.05+0.05 to -2.77... jak sobie z tym poradzić?

0
procedure TForm1.Button1Click(Sender: TObject);
var
    X, Y, Skok: Real;
begin
    X:=-0.05;
    Skok:=0.05;

    Y := X + Skok;
    ShowMessage(FloatToStr(Y));
end;
0

Real = Double :>

0

Real = Double

A co zabronisz mi pisać Real? Kwestia przyzwyczajenia chłopcze. :/

0

A zobaczcie to:

procedure TForm6.Button1Click(Sender: TObject);
var XM : Double;
begin
   XM:=-0.05;
   XM:=XM+0.05;
   ShowMessage(FloatToStr(XM));
end;
0
var XM : Double;
begin
   XM:=-0.05;
   XM:=XM+0.05;
   ShowMessage(FloatToStrF(XM, fffixed, 6,0));
end;
0

też mi problem; -2.77...e-18 to dwójka na osiemnastu miejscach po przecinku - chyba dobre przybliżenie zera? a może nie wystarcza? wiesz ile to 10^-18?
zapoznaj się z reprezentacją danych zmiennoprzecinkowych w pamięci komputera - liczby tego typu rzadko są reprezentowane idealnie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.