float
Typ
Der Typ float
speichert eine Realzahl, welche als Fliesskommazahl mit 4 Bytes codiert wird. Ein float
kann den Wertebereich von 1.175494e-38
bis 3.402823e+38
auf 6 Nachkommastellen genau abbilden, sowohl positiv, als auch negativ.
Details
Der Typ float
ist eine 32-Bit-Fliesskommazahl mit einer 23-Bit Mantisse. Dies entspricht dem Fliesskomma-Typ für einfache 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 float
auf dem System des Autors:
1.175494e-38
3.402823e+38
24
6
-125
-37
128
38
1.192093e-07
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 32 Bits verpackt wird, wird auf die Fliesskommacodierung verwiesen.
Bei der Angabe von festen Werten im Quellcode können float
-Werten ein kleines f
oder ein grosses F
als Suffix angehängt werden. Beide Suffixe bedeuten dasselbe, es wird jedoch normalerweise die Kleinbuchstaben-Variante verwendet. Ohne dieses Suffix nimmt der Compiler an, dass es sich um einen double
-Wert handelt.
Arithmetische Umwandlung
Bei Zuweisungen, Initialisierungen oder Casts zu einem float
-Typ werden durch den Compiler gegebenfalls arithmetische Umwandlungen durchgeführt. Im folgenden sind die Umwandlungsregeln für den float
-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 float
wird versucht, die Zahl wenn immer möglich exakt zu representieren. Da ein float
jedoch nur 6 genaue Nachkommastellen abbilden kann, können dementsprechen nur Integer-Werte bis und mit 7 Dezimalziffern garantiert exakt gespeichert werden.
Wenn ein double
oder long double
in einen float
umgewandelt wird, wird ebenfalls versucht, die Zahl so exakt wie möglich zu representieren. Hat die umzuwandelnde Fliesskommazahl keinen Platz in einem float
, so wird der maximal, beziehungsweise der minimal mögliche Wert angenommen: +-infinity