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