Fließkomma - Arithmetik

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Heon
User
Beiträge: 8
Registriert: Dienstag 27. Februar 2018, 10:03

Hallo,

ich bin irgendwie zu doof. ich habe mir auch schon Artikel dazu durchgelesen aber ich blicks irgendwie nicht:

Code: Alles auswählen

from decimal import *
getcontext().prec = 14
a =  20.117066497255
b = 163.41362791121173
c = Decimal(a) / Decimal(b)

d = Decimal(b)*Decimal(c)
print (d)
da kommt bei mir immer raus:
20.117066497256
warum ?
weil ich mehr Stellen zulasse ?
ich verstehs nicht

Heon
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Heon: Deine Zahl c wird auf 14 Nachkommasellen gerundet. Wenn Du die Zahl dann wieder mit einer 3-Stelligen Zahl multiplizierst, kannst Du ungefähr 11 Nachkommastellen Genauigkeit erwarten.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Kommt bei mir auch raus.

Erst dachte ich es würde daran liegen, dass du die Zahlen als Float übergibst, die dann ja auch schon nicht alle ins Dezimalsystem passen.

Code: Alles auswählen

from decimal import *
getcontext().prec = 140
a =  '20.117066497255'
b = '163.41362791121173'
c = Decimal(a) / Decimal(b)

d = Decimal(b)*Decimal(c)
print (d)
Ich hab die Präzision mal auf 140 gestellt. Raus kommt dieses Ergebnis:
20.117066497254999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

Also rundet er. Wie gerundet wird, kannst du auch einstellen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten