Seite 1 von 4
PB kann nicht rechnen!
Verfasst: 27.01.2006 10:20
von Gimbly
Hallo,
habe ziemlich lange einen vermeintlichen Bug in meinem Code gesucht, bis ich feststellte, das PB 3.94 doch tatsächlich 100 * 0.6 = 60.000004 rechnet!
Verfasst: 27.01.2006 10:58
von helpy
Und so stimmts wieder:
Mal im Ernst: Das ist wohl die ganz normale Rechenungenauigkeit, die bei Fließkommezahlen nun mal auftritt!
cu, helpy
Verfasst: 27.01.2006 11:11
von Gimbly
Das ist überhaupt nicht normal.
Probier mal folgendes:
PB errechnet dann 61!
Das gibts in keiner anderen Programmiersprache.
Verfasst: 27.01.2006 11:21
von remi_meier
Doch das ist normal, aber benutz nicht den Round() Befehl, der macht nicht,
was er sagt! Weise den Wert einfach einer Long-Variable zu und er wird
richtig gerundet:
Verfasst: 27.01.2006 11:23
von helpy
Gimbly hat geschrieben:Das ist überhaupt nicht normal.
Probier mal folgendes:
PB errechnet dann 61!
Das gibts in keiner anderen Programmiersprache.
Schau Dir mal die Beschreibung der Funktion Round() an!
Wenn Mode=1, dann wird aufgerundet!
Wenn Mode=0, dann wird abgerundet!
Round() ist lt. PB-Hilfe keine intelligente Runden-Funktion, die Zahlen abhängig vom Nachkomma-Anteil auf- oder abrunden.
cu, helpy
Verfasst: 27.01.2006 11:26
von helpy
remi_meier hat geschrieben:Doch das ist normal, aber benutz nicht den Round() Befehl, der macht nicht,
was er sagt! Weise den Wert einfach einer Long-Variable zu und er wird
richtig gerundet:
Naja, mit einer "intelligenten" Runden-Funktion ist das nicht vergleichbar! ... entspricht eher der Int() Funktion!
cu, helpy
Verfasst: 27.01.2006 11:45
von remi_meier
Verfasst: 27.01.2006 11:53
von Gimbly
helpy hat geschrieben:Wenn Mode=1, dann wird aufgerundet!
Wenn Mode=0, dann wird abgerundet!
Was in der Hilfe steht ist mir schon klar.
100.0 * 0.6 ergibt 60, und 60
aufgerundet ergibt immer noch 60 und nicht 61.
Das ist ganz klar ein Bug!
Danke remi_meier, so funktioniert es, ist aber nur ne Notlösung!
Verfasst: 27.01.2006 12:00
von helpy
Gimbly hat geschrieben:helpy hat geschrieben:Wenn Mode=1, dann wird aufgerundet!
Wenn Mode=0, dann wird abgerundet!
Was in der Hilfe steht ist mir schon klar.
100.0 * 0.6 ergibt 60, und 60
aufgerundet ergibt immer noch 60 und nicht 61.
Das ist ganz klar ein Bug!
Seh' ich nicht so!
Wenn das Ergebnis von [c]100.0 * 0.6 =
60.000004[/c] ist, dann ist diese Zahl aufgerundet 61!
Woher soll der Befehl Round() wissen, dass das Ergebnis eigentlich 60.0 sein soll, wenn durch die einfache Fließkommagenauigkeit (eigentlich ist es ja eine Fließkommaungenauigkeit) der Wert 60.000004 entsteht, und somit der Befehl Round() eben nicht den Wert 60.0 erhält?
cu, helpy
Verfasst: 27.01.2006 12:03
von helpy
remi_meier hat geschrieben:Wieso?
Wow!!!
Dann ist [c]b.l = a.f[/c] besser zum Runden geeignet als Round() !!!
cu, helpy