Hallo alle Zusammen!
Also ich bin noch ganz neu hier... Mein Problem ist folgendes: Wenn ich im Python Shell das folgende eingebe:
165239359999790353 / 2 --> bekomme ich "richtig" 82619679999895176L
einfach ohne Kommastelle.
wenn ich nun aber das eingebe:
165239359999790353 / 2.0 -->bekomme ich das Ergebnis ' 82619679999895184, das ist aber um 7.5 zu gross!
Wie kann ich diese "Art" von Fehlern verhindern ?
Vielen Dank für eure Zeit!
mfg Murumesch
Probleme mit Division [Es geht nicht um Kommastellen]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
In dem du nicht mit Floats rechnest. Wenn du mit Integer-Werten auskommst solltest du bei diesen beliben. Wenn es dir auf die Nachkomma-Stellen ankommt, dann kannst du den Datentyp Decimal verwenden:Murumesch hat geschrieben:Wie kann ich diese "Art" von Fehlern verhindern ?
Code: Alles auswählen
In [64]: from decimal import Decimal
In [65]: 165239359999790353 / Decimal("2.0")
Out[65]: Decimal("82619679999895176.5")
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hoi,
versuche es mal mit dem decimal-Modul. Das hat zwar gewisse andere Nachteile, aber Dein spezifisches Problem - die Zahl größer als Dein größtmögliches float - solltest Du so umgehen können.
Gruß,
Christian
edit: zu langsam, so am Abend
versuche es mal mit dem decimal-Modul. Das hat zwar gewisse andere Nachteile, aber Dein spezifisches Problem - die Zahl größer als Dein größtmögliches float - solltest Du so umgehen können.
Gruß,
Christian
edit: zu langsam, so am Abend
Im Prinzip geht es doch wieder im Kommastellen. Fließkommazahlen sind halt nicht in beliebiger Genauigkeit darstellbar. Probier doch mal:
Wenn es wirklich genau sein soll, mußt Du das decimal-Modul verwenden.
MfG
HWK
Code: Alles auswählen
>>> 165239359999790353.0
1.6523935999979037e+017
>>> 16523935999979035.0
16523935999979034.0
>>> 1652393599997903.0
1652393599997903.0
MfG
HWK
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Pssssst, das geht heute schon den ganzen Tag so, dass verschiedene Leute versuchen schneller als BlackJack zu postenCM hat geschrieben:edit: zu langsam, so am Abend
Edit: Hi Marumesch, willkommen im Forum
Zuletzt geändert von Leonidas am Dienstag 17. Oktober 2006, 20:27, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Stimmt.
So weit ich das weiß gibt es bei Fließkommazahlen, die mit dem Typ '' float '', eine kleine Ungenauigkeit. Wie groß die ist kannst du gaaaanz einfach testen.
So weit so gut Alles scheint gut zu sein
Und genau hier siehst du die Ungenauigkeit
Das ist bei kleinen sachen sehr gering. bei großen allerdings wirkt sich das auch dementsprechend aus.
MfG EnTeQuAk
EDIT:
verdammt... das ging schnell eignentlich war ich zweiter
So weit ich das weiß gibt es bei Fließkommazahlen, die mit dem Typ '' float '', eine kleine Ungenauigkeit. Wie groß die ist kannst du gaaaanz einfach testen.
Code: Alles auswählen
>>> float(2)
2.0
Code: Alles auswählen
>>> float(2.1)
2.1000000000000001
Das ist bei kleinen sachen sehr gering. bei großen allerdings wirkt sich das auch dementsprechend aus.
MfG EnTeQuAk
EDIT:
verdammt... das ging schnell eignentlich war ich zweiter
@Leonidas: LOL, versuche ich zwar gar nicht, aber vielleicht sollte ich erst einmal eine Viertelstunde abwarten, wenn er online ist? (no offense BJ )
wobei mir aber noch einfällt: Je nach Applikation, kann man mit einer Modifikation von numpy ebenfalls höhere Präzision erreichen. Allerdings werde ich das erst herauskramen, wenn hier jemand echten Bedarf anmeldet ...
Gruß,
Christian
edit: und um hier noch kleine Mißverständnisse auszuräumen: http://docs.python.org/tut/node16.html
wobei mir aber noch einfällt: Je nach Applikation, kann man mit einer Modifikation von numpy ebenfalls höhere Präzision erreichen. Allerdings werde ich das erst herauskramen, wenn hier jemand echten Bedarf anmeldet ...
Gruß,
Christian
edit: und um hier noch kleine Mißverständnisse auszuräumen: http://docs.python.org/tut/node16.html
In dem Artikel fehlt eindeutig eine Erwähnung von ``from __future__ import division`` und der Ganzzahldivision mit ``//``.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, braucht man, bis Python 3.0.0 alpha 0:jens hat geschrieben:Brauch man es auch für Python 2.5 ? Wo steht was in der Doku dazu?
Code: Alles auswählen
In [1]: from __future__ import division
In [2]: ?division
Type: instance
Base Class: __future__._Feature
String Form: _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
Namespace: Interactive
Docstring:
<no docstring>
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice