Si l'implémentation prend en charge l'un des types
ISO 60559
suivants comme type flottant étendu, alors :
-
la macro correspondante est définie comme
1
pour 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 langage C
|
Propriétés du type
|
|
bits de stockage
|
bits de précision
|
bits d'exposant
|
exposant maximum
|
|
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]
Voir aussi