double
Typ
Der Typ double
speichert eine Realzahl, welche als Fliesskommazahl mit 8 Bytes codiert wird. Ein double
kann den Wertebereich von 2.225074e-308
bis 1.797693e+308
auf 15 Nachkommastellen genau abbilden, sowohl positiv, als auch negativ.
Details
Der Typ double
ist eine 64-Bit-Fliesskommazahl mit einer 52-Bit Mantisse. Dies entspricht dem Fliesskomma-Typ für doppelte Genauigkeit in der IEEE 754 Norm. In der floats
-Bibliothek sind einige Makros definiert, welche den Wertebereich von Fliesskommatypen genauer spezifizieren. Folgendes Programm liefert die Werte für den Typ double
auf dem System des Autors:
2.225074e-308
1.797693e+308
53
15
-1021
-307
1024
308
2.220446e-16
Es ist zu beachten, dass die Mantisse-Zahl in der floats
-Bibliothek stets ein implizites Bit hinzuzählt. Für genauere Informationen, was es mit diesem Bit auf sich hat, und wie eine Fliesskommazahl in 64 Bits verpackt wird, wird auf die Fliesskommacodierung verwiesen.
Bei der Angabe von festen Werten im Quellcode werden Fliesskommazahlen standardmässig als double
-Werte angenommen. Durch die Angabe eines Suffix kann dem Compiler gegebenfalls angegeben werden, dass es sich um einen float
-Wert oder einen long double
-Wert handelt.
Arithmetische Umwandlung
Bei Zuweisungen, Initialisierungen oder Casts zu einem double
-Typ werden durch den Compiler gegebenfalls arithmetische Umwandlungen durchgeführt. Im folgenden sind die Umwandlungsregeln für den double
-Typ beschrieben. In manchen Fällen gibt ein Compiler bei einer unsicheren Umwandlungen eine Warnung aus, welche jedoch bei Bedarf mittels eines expliziten Casts unterdrückt werden kann.
Arithmetische Umwandlungen von Fliesskomma-Werten sollten wenn immer möglich vermieden werden, egal ob sie implizit oder explizit mittels Casts erwirkt werden. Sie sind auch in modernen Prozessoren immer noch sehr kostspielig. Hierbei ist ausserdem zu beachten, dass in bestimmten Situationen Fliesskomma-Werte automatisch in einen double
konvertiert werden (siehe Promotion).
Bei der Umwandlung eines Integer-Typs in einen double
wird versucht, die Zahl wenn immer möglich exakt zu representieren. Da ein double
jedoch 15 Nachkommastellen exakt abbilden kann, können dementsprechen alle Integer-Werte bis und mit 16 Dezimalziffern garantiert exakt gespeichert werden. Dies ist für die allermeisten Fälle ausreichend, kann jedoch bei long long
-Werten zu Problemen führen:
6543210987654321
76543210987654320
Wenn ein long double
in einen double
umgewandelt wird, wird ebenfalls versucht, die Zahl so exakt wie möglich zu representieren. Hat die umzuwandelnde Fliesskommazahl keinen Platz in einem double
, so wird der maximal, beziehungsweise der minimal mögliche Wert angenommen: +-infinity
Bei einer Umwandlung eines float
in einen double
kann der Wert in jedem Falle exakt gespeichert werden.