long double
Typ
Der Typ long double
speichert eine Realzahl, welche als Fliesskommazahl mit heutzutage üblicherweise 80, 96 oder 128 Bits codiert wird. Ein long double
kann den Wertebereich von 3.362103e-4932
bis 1.189731e+4932
auf 18 Nachkommastellen genau abbilden, sowohl positiv, als auch negativ.
Details
Je nach System, Prozessor oder Compiler benötigt der Typ long double
10, 12 oder 16 Bytes zum Speichern des Wertes. Jedoch verwenden die meisten Implementationen nur 80 Bits für die Codierung der Fliesskommazahl. Je nach System oder Prozessor kann dieser Typ anders definiert sein. Es handelt sich hierbei um einen sogenannt erweiterten
Fliesskomma-Typ gemäss der IEEE 754 Norm.
Der Typ long double
gehorcht teilweise seltsamen Gesetzen, welche vorwiegend von den Prozessor-Designern festgelegt wurden. Auf dieser Seite wird deswegen auf eine detailierte Behandlung verzichtet. Wer sich jedoch für die auf seiner Maschine gültige Definition interessiert, findet in der floats
-Bibliothek einige Makros, welche den Wertebereich von Fliesskommatypen genauer spezifizieren. Folgendes Programm liefert die Werte für den Typ long double
auf dem System des Autors:
3.362103e-4932
1.189731e+4932
64
18
-16381
-4931
16384
4932
1.084202e-19
Es ist zu beachten, dass die Mantisse-Zahl in der floats-Bibliothek normalerweise ein implizites Bit hinzuzählt. Für genauere Informationen, was es mit diesem Bit auf sich hat, wird auf die Fliesskommacodierung verwiesen.
Bei der Angabe von festen Werten im Quellcode können long double
-Werten ein kleines l
(ell) oder ein grosses L
als Suffix angehängt werden. Beide Suffixe bedeuten dasselbe, aufgrund der visuellen Ähnlichkeit des kleinen l
(ell) zur Ziffer 1
(Eins) ist jedoch die Empfehlung des Autors, stets die Grossbuchstaben-Version zu verwenden. Ohne Suffix nimmt der Compiler an, dass es sich um einen double
-Wert handelt.
Arithmetische Umwandlung
Bei Zuweisungen, Initialisierungen oder Casts zu einem long double
-Typ werden durch den Compiler gegebenfalls arithmetische Umwandlungen durchgeführt.
Der long double
-Typ ist der mächtigste Typ in C und C++. Seine Genauigkeit ist normalerweise so festgelegt, dass sowohl sämtliche Integer-Typen, als auch alle Fliesskomma-Typen exakt umgewandelt werden können.
Arithmetische Umwandlungen von Fliesskomma-Werten sollten jedoch 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).