Seite 1 von 2

Verfasst: Donnerstag 17. Oktober 2002, 22:08
von hans
Jetz muß ich doch auch mal wieder mitmischen :D

wie weit ist 1,39999999999 von 1,40 entfern? Denke, der Fehler ist vernachlässigbar klein. Und wenns beim Ausdruck stört dann schreib doch

Code: Alles auswählen

print '%8.2f" % 1.4999999999999'
Ich weiß nicht ob es sich lohnt, den Differenzbetrag auf mein Konto zu überweisen:D

Hans

Verfasst: Donnerstag 17. Oktober 2002, 22:21
von Voges
Hallo!
RicmanX hat geschrieben:>>> round(1.35,1)
1.3999999999999999
Dafür reicht schon Folgendes:
>>> 1.0/10
0.10000000000000001
>>>

Aber das liegt nun mal in der Natur der Sache, sprich der internen Darstellung von Fließkommazahlen.

Jan

Verfasst: Donnerstag 17. Oktober 2002, 22:34
von hans
Ich weiß daß das sp ist, auch wenn ich nicht weiß wie man Fließkomma in Biär darstellt. Das tut aber auch nichts zu Sache. Nur diese Pfennigsfuchserei.....

Ich hole mal gerade mein altes Lehrbuch (Küster Thiel Fischbeck, Logarithmische Rechentafeln, 100. Auflage, 1969)
Der Mangel an mathematischer Bildung gibt sich durch nichts so auffallend zu erkennen, wie durch maßlose Schärfe im Zahlenrechnen

C.F. Gauss

Verfasst: Freitag 18. Oktober 2002, 10:01
von RicmanX
Das Problem ist ja das man mit den Zahlen - ich zumindest - weiterrechnen muss, und Genauigkeit ist auch notwendig.
Und wenn ich ne Zahl mit zehn Nachkommastellen hab, ist das genauso schlecht wie wenns 50 auch nur um nicht sehr viel falsch ist... alle andern Sprachen können schließlich rechnen, das und das Python nur auf wenigen Servern installiert ist ist mE das einzige Manko an Python.

Verfasst: Freitag 18. Oktober 2002, 13:52
von Dookie
Hi RicmanX,
RicmanX hat geschrieben:alle andern Sprachen können schließlich rechnen
Welche?
Lass mal

Code: Alles auswählen

((10.0*3.0)/3.0)-((10.0/3.0)*3.0)
berechnen.
Und dann sag mir bei welcher Sprache das richtige Ergebnix nämlich 0.0 rauskommt.


Gruß

Dookie

P.S.: ich habs grad mit Python probiert, und wundersamerweise kommt 0.0 raus :D

Verfasst: Freitag 18. Oktober 2002, 19:12
von hans
RicmanX hat geschrieben:Das Problem ist ja das man mit den Zahlen - ich zumindest - weiterrechnen muss, und Genauigkeit ist auch notwendig.
Und wenn ich ne Zahl mit zehn Nachkommastellen hab, ist das genauso schlecht wie wenns 50 auch nur um nicht sehr viel falsch ist... alle andern Sprachen können schließlich rechnen, das und das Python nur auf wenigen Servern installiert ist ist mE das einzige Manko an Python.
Also das mußt du mir vorrechnen, daß eine Abweichung von 10E-7 (sprich zehn hoch minus sieben = 0,0000001) sich noch signifikant bemerkbar macht. Jedenfalls nicht, wenn's um Währungsrechnung geht. Bei physikalischen Berechnungen kann das etwas anders aussehen.

Du kannst natürlich Cobol einsetzen (gibt's bei www.thekompany.com als Kobol). Da mußt du dein Ergebnis forher genau definieren, z. B. mit PIC 99999.99 Wenn Du mit einem derartigen Zwischenergebnis weiterrechnest, dann steht irgendwann dein Chef auf der Matte, denn da sind die Abweichungen größer als bei Floatingpoint.

Im übrigen rechen die Programme nicht mit einer festen Anzahl an Nachkommastellen, sondern mit signifikanten stellen, d. h. je mehr Vorkommastellen, desto weniger Nachkommastelen sind exakt darstellbar. Das kann dir aber ein Informatiker bestimmt besser auseinanderpflücken als ich.

Hans

Verfasst: Samstag 19. Oktober 2002, 11:10
von RicmanX
Nee, geht um Dateigrößen. Und wenn ich sag auf 1 oder 2 Stellen runden und es kommen öfters mal 9 Nachkommastellen raus, ist das ziemlich dumm. Zumal sich das nachm addieren aller auch nicht auf 2 Stellen mehr runden lassen will, und abschneiden will ich nicht grad. Bloß wenn ichs dann so anzeigen lassen würde, wie sähe das denn aus??

(Ich weiß klingt irgendwie pedantisch, aber Ordnung muss sein :P)

Verfasst: Samstag 19. Oktober 2002, 13:21
von hans
RicmanX

Rechnen ist die eine Sache, darstellen eine andere.

Code: Alles auswählen

print "%d" % 1.500001 #druckt 1!!!!!
print "%.0f" % 1.500000001 # gibt 2
Hans

Verfasst: Samstag 19. Oktober 2002, 13:45
von Dookie
Hi,

das Ganze geht auch ohne Print:

Code: Alles auswählen

>>> a = "%4.2f" % 1.49999999
>>> print a
1.50
so kann es natürlich auch in einer GUI verwendet werden.


Dookie

Verfasst: Samstag 19. Oktober 2002, 20:27
von hans
Jo ich weiß, aber daran denken, daß a * 2 nicht 3.00 ergibt.

Code: Alles auswählen

>>> a="%.2f" % 1.4999999999
>>> b=2*a
>>> print a
1.50
>>> print b
1.501.50
>>>

Verfasst: Freitag 12. November 2004, 14:27
von Ravenlord
wo ihr schon dabei seid:

ich habe eine rechnung mit round(x, 2) und bekomme dann wie schon erwähnt z.b. 3.333332 oder so.
wie kann ich mit nur 2 stellen z.b weiterrechnen (also 3.33)
wär super wenn mir das jemand sagen kann ;)

thx

Verfasst: Freitag 12. November 2004, 14:54
von mitsuhiko
Also ich kenn keine Sprache, die Fließkommazahlen 100% richtig rechnet. Python ist da schon seh nahe.

*kram* "Ach da hab ichs..."
Aus einer Signatur am Delphi Forum::
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!

Warum wohl :D ?

Verfasst: Freitag 12. November 2004, 16:12
von Dookie
Hi nochmal,

eine kleine Verbesserung, zumindest was das Rechnen mit Dezimalzahlen z.B. Geldbeträgen etwas genauer macht ist mit Python2.4 in sicht. Dort gibt es den Datentyp decimal der wohl intern mit bcd-zahlen (binary coded decimal) arbeitet.
(10.0 / 3.0) * 3.0 ist aber auch dann noch 9.999999999


Gruß

Dookie