simple Float-Berechnung Python?
kelvinzahl = 273.15
eingabe = input()
ergebnis = float(eingabe) - kelvinzahl
print(ergebnis)
print(float(eingabe))
print(kelvinzahl)
Bei eingabe = 300 kommt "26.850000000000023" als Ergebnis. Wieso?!
eingabe als auch kelvinzahl haben weniger/keine Nachkommastellen...
Nutze die IDLE Shell 3.12.0
3 Antworten
Computer speichern Zahlen in einem binären Format, das nicht immer in der Lage ist, eine exakte Darstellung einer Dezimalzahl zu liefern. Dies führt zu sehr kleinen Rundungsfehlern bei der Berechnung mit Fließkommazahlen. Der Unterschied ist extrem klein (0.000000000000023), was auf einen Rundungsfehler hinweist.
from decimal import Decimal
kelvinzahl = Decimal('273.15')
eingabe = Decimal(input())
ergebnis = eingabe - kelvinzahl
print(float(ergebnis))
In diesem Code wird
Decimal
anstelle von
float
verwendet, um die Zahlen zu repräsentieren, was zu genauerem Rechnungen führt. Beachte, dass dies in den meisten Fällen wahrscheinlich nicht notwendig ist, da die kleinen Ungenauigkeiten bei der Arbeit mit
float
in der Regel vernachlässigbar sind.
Das haben Fließkommarechenoperationen im Computer so an sich - sie sind nicht präzise. Daher rundet/schneidet man die Ausgabe auch auf eine sinnvolle Anzahl Nachkommastellen.
Ganz normal.
Ein Computer mit Binärdarstellung kann Zahlen mit Nachkommastellen nur bei besonderen Werten (..,5 / ..,25 / ..,75 / ...) exakt speichern.
Deine Ausgabe versucht, mehr Dezimalstellen zu berechnen, als an Information im float vorhanden ist.
Das ist unabhängig von der Programmiersprache.
float und double (Java, C++) nutze ich daher sogut wie nie.
Was nutzt du denn dann, um Gleitkommazahlen darzustellen oder zu verarbeiten ?