Types à virgule flottante de largeur fixe (depuis C++23)
Si l'implémentation prend en charge l'un des types ISO 60559 suivants en tant que type à virgule flottante étendu, alors :
- la macro correspondante est définie comme
1pour indiquer la prise en charge, - le suffixe littéral à virgule flottante correspondant est disponible, et
- le nom d'alias de type correspondant est fourni :
| Types Défini dans l'en-tête <stdfloat> |
Suffixe littéral | Macro prédéfinie | Type C du langage | Propriétés du type | |||
|---|---|---|---|---|---|---|---|
| bits de stockage | bits de précision | bits d'exposant | exposant max | ||||
| float16_t | f16 ou F16
|
__STDCPP_FLOAT16_T__
|
_Float16
|
16 | 11 | 5 | 15 |
| float32_t | f32 ou F32
|
__STDCPP_FLOAT32_T__
|
_Float32
|
32 | 24 | 8 | 127 |
| float64_t | f64 ou F64
|
__STDCPP_FLOAT64_T__
|
_Float64
|
64 | 53 | 11 | 1023 |
| float128_t | f128 ou F128
|
__STDCPP_FLOAT128_T__
|
_Float128
|
128 | 113 | 15 | 16383 |
| bfloat16_t | bf16 ou BF16
|
__STDCPP_BFLOAT16_T__
|
(N/A) | 16 | 8 | 8 | 127 |
Notes
Le type
std::bfloat16_t
est connu sous le nom de
Brain Floating-Point
.
Contrairement aux types entiers de largeur fixe , qui peuvent être des alias vers des types entiers standard , les types à virgule flottante de largeur fixe doivent être des alias vers des types à virgule flottante étendus (pas float / double / long double ), et ne sont donc pas des remplacements directs des types à virgule flottante standard.
Exemple
#include <stdfloat> #if __STDCPP_FLOAT64_T__ != 1 #error "64-bit float type required" #endif int main() { std::float64_t f = 0.1f64; }
Références
- Norme C++23 (ISO/IEC 14882:2024) :
-
- 6.8.3 Types à virgule flottante étendus optionnels [basic.extended.fp]