FPC setzt meine Variable = -0

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
kaczy
Beiträge: 9
Registriert: Mo 5. Mär 2007, 09:32

FPC setzt meine Variable = -0

Beitrag von kaczy »

HI Leute,

ich habe ein echt blödes Problem. Wenn ich die Zahlen -1.827 und 5.0508e-27 miteinander multipliziere und in eine Variable vom Typ extended speichere, kriege ich -0 raus. Auch wenn ich von Hand das Ergebnis in die Variable speichere, kriege ich -0. Woran liegts?

vielen Dank im voraus
Thomas

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das Ergebnis ist ja auch -0,000000000000000000092278116
Warum das allerdings abgeschnitten wird weiss ich nicht
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

kaczy
Beiträge: 9
Registriert: Mo 5. Mär 2007, 09:32

Beitrag von kaczy »

stimmt schon, aber die anderen Ergebnisse schreibt er mir aus. In meinen weiteren Rechnungen teile ich aber durch a und kriege einen Floatrechenfehler (SIGFPE glaube ich).

Thomas

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Es wird ja auch nicht abgeschnitten ich habs gerade ausprobiert und der volle Wert stand hinterher im Extended drin was erzählst du denn ? Kommt doch gar nicht -0 raus.

Was meinst du mit "schreibt aus"

Code: Alles auswählen

a := -1827 * 0.000000000000000000000050508;
  a := a/5;


Das hier hab ich gerade probiert und es läuft prima.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

kaczy
Beiträge: 9
Registriert: Mo 5. Mär 2007, 09:32

Beitrag von kaczy »

er schreibt die anderen WErte in wissenschaftlicher schreibweise aus:
-0 9.2278116E-27 1.85787582416E-23 2.72229001822796E-27 2.15731411124887E-47
die Null ist die Zahl die ich brauche, 9.22... ist das Ergebnis, wenn ich ohne das Minus bei 1.827 rechne

Thomas

kaczy
Beiträge: 9
Registriert: Mo 5. Mär 2007, 09:32

Beitrag von kaczy »

HI habe gerade nochmal geguckt,

scheint eher ein Fehler in der Ausgabe zu sein, in der Variable ist der richtige Wert drin, aber ausgegeben wird er wegen dem - nicht.

trotzdem danke
Thomas

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das ist das was ich dich oben schon gefragt habe was bitte heisst "schreibt aus" ?????????

writeln ???????????????
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

kaczy
Beiträge: 9
Registriert: Mo 5. Mär 2007, 09:32

Beitrag von kaczy »

achso, sorry

ich lasse mir die Sachen einfach in einem Memo ausgeben

aMemo.Lines.Add('a='+FloatToStr(a/a)+' '+FloatToStr(-a)+' '+FloatToStr(b)+' '+FloatToStr(c)+' '+FloatToStr(d));

Thomas

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Dann würd ich mir einfach mal anschauen was FloatToStr macht ....

http://www.delphibasics.co.uk/RTL.asp?Name=FloatToStr

Floattostr kann nämlich nur 15 Stellen genauigkeit weshalb dir -0 angezeigt wird. Und es formatiert nunmal alles was geht mit expotentialdarstellung.

Wenn du es anders ausgegeben haben willst solltest du auch ne andere Funktion nehmen. Nirgendwo n Bug ;)

Kannst z.b. FloatToStrF nehmen http://www.delphibasics.co.uk/RTL.asp?Name=FloatToStrF
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

kaczy
Beiträge: 9
Registriert: Mo 5. Mär 2007, 09:32

Beitrag von kaczy »

HI danke für die Hilfe,

hätte ich auch selber drauf kommen können.

nochmals vielen Dank

Thomas

Antworten