double (Gleitkommazahl)
Kurz: Ein Datentyp für Zahlen mit Nachkommastellen (Gleitkommazahlen) mit doppelter Genauigkeit — der Name “double” bezieht sich auf die doppelte Speichergröße im Vergleich zum einfach genauen float.
Genauer: Gleitkommazahlen werden intern nicht exakt, sondern näherungsweise binär gespeichert — dadurch können bei Berechnungen kleine Rundungsfehler entstehen (z. B. 0.1 + 0.2 ergibt nicht immer exakt 0.3). Für Geldbeträge, bei denen exakte Genauigkeit wichtig ist, wird deshalb oft ein spezieller Dezimaltyp statt double verwendet.
Im Detail
0.1 + 0.2 == 0.3 # False! Ergebnis ist tatsächlich 0.30000000000000004Dieses berühmte Beispiel überrascht fast jeden Einsteiger. Der Grund liegt in der Natur der binären Fließkomma-Darstellung (nach dem IEEE-754-Standard, den praktisch alle Sprachen für double/float verwenden): Genauso wie sich 1/3 im Dezimalsystem nicht exakt als endliche Kommazahl darstellen lässt (0,333…), lassen sich manche Dezimalbrüche wie 0,1 im Binärsystem nicht exakt darstellen — der gespeicherte Wert ist immer eine sehr nahe, aber nicht exakt identische Näherung.
Diese winzigen Rundungsfehler summieren sich normalerweise nicht spürbar auf und stören bei wissenschaftlichen oder grafischen Berechnungen kaum. Kritisch werden sie in zwei typischen Situationen:
# GEFÄHRLICH: direkter Gleichheitsvergleich zweier Gleitkommazahlen
if berechneter_wert == erwarteter_wert: # kann fälschlich False sein, wegen Rundungsfehlern
# BESSER: Vergleich mit Toleranzbereich
if abs(berechneter_wert - erwarteter_wert) < 0.0001:Und bei Geldbeträgen, wo exakte Genauigkeit rechtlich und praktisch zwingend ist — ein Rundungsfehler von wenigen Cent, der sich über Millionen Transaktionen aufsummiert, ist kein akzeptables Risiko. Deshalb verwenden Finanzsysteme fast nie double direkt für Geldbeträge, sondern entweder einen speziellen, exakten Dezimaltyp (z. B. Javas BigDecimal, Pythons Decimal) oder rechnen konsequent in der kleinsten Einheit als Ganzzahl (Cent statt Euro), um Rundungsprobleme komplett zu vermeiden.
double bietet gegenüber dem einfach genauen float etwa die doppelte Anzahl signifikanter Nachkommastellen (ca. 15-17 statt 6-7), braucht dafür aber auch doppelt so viel Speicher (64 statt 32 Bit) — in den meisten modernen Sprachen und Anwendungen ist double deshalb der Standard, float kommt vor allem dort zum Einsatz, wo Speicher- oder Geschwindigkeitsvorteile bei riesigen Datenmengen (z. B. Grafikprogrammierung) den Genauigkeitsverlust rechtfertigen.
Siehe auch: byte, Type Casting