float.h
- Makros für Fliesskommatypen
Die in die Sprachen C und C++ eingebauten Fliesskommatypen float
, double
und long double
sind je nach System und Compiler unterschiedlich definiert und können dementsprechend unterschiedliche Zahlenbereiche abdecken. Die im aktuell verwendeten Compiler möglichen Werte sind als Konstanten definiert, welche mittels der float
-Bibliothek abgefragt werden können.
C C++
#include <float.h> #include <cfloat>
Für die drei Fliesskomma-Typen existieren jeweils Makros, welche den Minimal und Maximal darstellbaren Wert beschreiben. Hierbei handelt es sich jedoch beim Minimum nicht wie bei den Ganzzahlen um einen negativen Wert, sondern um den kleinsten Wert, der grösser ist als 0
(Null). Fliesskommazahlen besitzen stets ein Vorzeichen-Bit, womit die durch die Makros beschriebenen Werte somit auch für negative Werte verwendet werden können.
1.175494e-38 3.402823e+38 2.225074e-308 1.797693e+308 3.362103e-4932 1.189731e+4932
#include <stdio.h> #include <float.h> int main(){ printf("%e\n", FLT_MIN); printf("%e\n", FLT_MAX); printf("%le\n", DBL_MIN); printf("%le\n", DBL_MAX); printf("%Le\n", LDBL_MIN); printf("%Le\n", LDBL_MAX); return 0; }
Es ist zu beachten, dass je nach System die ausgegebenen Werte unterschiedlich sein können. Die auf dieser Seite angegebenen Werte sind diejenigen, welche auf dem System des Autors ausgegeben wurden.
In der float
-Bibliothek befinden sich noch weitere Makros mit Konstanten zu Basis (Radix), Mantisse, Exponent, Maschinenepsilon sowie Anzahl signifikanter Ziffern aller drei Fliesskommatypen. Aufgrund der komplexen Thematik der Fliesskomma-Arithmetik werden auf dieser Seite diese Makros jedoch nur mit den beim Autor definierten Werten in der folgenden Tabelle aufgelistet. Für weiterführende Informationen wird auf die Fliesskommacodierung sowie andere Quellen verwiesen. Es ist zu beachten, dass die hier angegebene Mantisse-Bitanzahl stets ein implizites Bit hinzuzählt.
FLT_RADIX 2 The basis of the exponential representation FLT_ROUNDS 1 rounding method FLT_EVAL_METHOD 0 Floating point evaluation method DECIMAL_DIG 21 Maximum number of rounding-precise decimal places FLT_MANT_DIG 24 Number of radix digits of the mantissa for float DBL_MANT_DIG 53 Number of radix digits of the mantissa for double LDBL_MANT_DIG 64 Number of radix digits of the mantissa for long double FLT_DIG 6 Number of exact decimal places for float DBL_DIG 15 Number of exact decimal places for double LDBL_DIG 18 Number of exact decimal places for long double FLT_MIN_EXP -125 Minimum radix exponent for normalized float DBL_MIN_EXP -1021 Minimum radix exponent for normalized double LDBL_MIN_EXP -16381 Minimum radix exponent for normalized long double FLT_MIN_10_EXP -37 Minimum decimal exponent for normalized float DBL_MIN_10_EXP -307 Minimum decimal exponent for normalized double LDBL_MIN_10_EXP -4931 Minimum decimal exponent for normalized long double FLT_MAX_EXP 128 Maximum radix exponent for normalized float DBL_MAX_EXP 1024 Maximum radix exponent for normalized double LDBL_MAX_EXP 16384 Maximum radix exponent for normalized long double FLT_MAX_10_EXP 38 Maximum decimal exponent for normalized float DBL_MAX_10_EXP 308 Maximum decimal exponent for normalized double LDBL_MAX_10_EXP 4932 Maximum decimal exponent for normalized long double FLT_EPSILON 1.192093e-07 Machine Epsilon for float DBL_EPSILON 2.220446e-16 Machine Epsilon for double LDBL_EPSILON 1.084202e-19 Machine Epsilon for long double