Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rechenfehler (https://www.delphipraxis.net/55824-rechenfehler.html)

rado 27. Okt 2005 13:17


Rechenfehler
 
Hallo,

ich erhalte einen Rechenfelher bei folgendem Code:

var
gesamtlaenge: extended;

gesamtlaenge:=gesamtlaenge+strtofloat(edit9.text);

Wenn man in edit9 den Wert 2,36 eingibt und anschließend die Addition ausführt und dann in edit9 -2,36 eingibt müsste man 0 als Ergebnis in gesamtlaenge erhalten.
Es steht aber in gesamtlaenge -1,242E-16

Dies passiert aber nur bei 2,36.
Kann mir jemand weiterhelfen, enthalten die Mathematischen Bibliotheken von Delphi Fehler?

Gruß rado

Neutral General 27. Okt 2005 13:23

Re: Rechenfehler
 
Zitat:

Kann mir jemand weiterhelfen, enthalten die Mathematischen Bibliotheken von Delphi Fehler?
Mit Sicherheit nicht...
Welchen Wert hat denn gesamtlaenge wenn 2,36 hinzuaddiert wird ? Außerdem schau mal in der DelphiHilfe nach StrToFloatF.

EDIT : StrToFloatF -.- Gehts mir noch gut ?^^ Sry das war Schwachsinn... überlest das hier einfach :mrgreen:

Kroko1999 27. Okt 2005 13:24

Re: Rechenfehler
 
das sind übliche Rundungsfehler
Delphi-Quellcode:
function NullVal(const Value,Epsilon: Extended): Extended;
begin
  if Abs(Value)<Epsilon then Result := 0
                        else Result := Value;
end;
//EDIT
Aufruf:
Delphi-Quellcode:
  A := NullVal(A,1E-10);

TeronG 27. Okt 2005 13:30

Re: Rechenfehler
 
Zitat:

Zitat von rado


Delphi-Quellcode:
var
  gesamtlaenge: extended;

procedure TForm1.Button1Click(Sender: TObject);
begin
  gesamtlaenge:=gesamtlaenge+strtofloat(edit9.text);
end
Wenn man in edit9 den Wert 2,36 eingibt und anschließend die Addition ausführt und dann in edit9 -2,36 eingibt müsste man 0 als Ergebnis in gesamtlaenge erhalten.
Es steht aber in gesamtlaenge -1,242E-16

Dies passiert aber nur bei 2,36.
Kann mir jemand weiterhelfen, enthalten die Mathematischen Bibliotheken von Delphi Fehler?

Gruß rado

Nein kann ich nicht, den bei mir funktioniert dein Code eigentlich einwandfrei :gruebel: evtl. spuckt ja noch was anderes aus deinem Proggie da rein?

rado 27. Okt 2005 13:57

Re: Rechenfehler
 
Zitat:

Zitat von Neutral General
Zitat:

Kann mir jemand weiterhelfen, enthalten die Mathematischen Bibliotheken von Delphi Fehler?
Mit Sicherheit nicht...
Welchen Wert hat denn gesamtlaenge wenn 2,36 hinzuaddiert wird ? Außerdem schau mal in der DelphiHilfe nach StrToFloatF.

EDIT : StrToFloatF -.- Gehts mir noch gut ?^^ Sry das war Schwachsinn... überlest das hier einfach :mrgreen:


Die Variable ist mit 0 gefüllt.
gesamtlaenge:=0;

Gruß rado

dizzy 27. Okt 2005 14:03

Re: Rechenfehler
 
Ich kram dann nochmals, wie ich es gern mache, diesen Post raus :). Eine 0 lässt sich als Float nicht darstellen. Dafür wird ein Flag in der FPU geführt, welches aber idR nur gesetzt wird, wenn man direkt eine 0 zuweist, oder die Rechnung trotz aller Ungenauigkeiten genau auf 0 kommt. Gewährleistet ist das allerdings nicht.

Gruss,
Fabian


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz