Tipos de punto flotante de ancho fijo (desde C++23)
Si la implementación soporta alguno de los siguientes tipos ISO 60559 como un tipo de punto flotante extendido, entonces:
- la macro correspondiente se define como
1para indicar soporte, - el sufijo literal de punto flotante correspondiente está disponible, y
- el nombre del alias de tipo correspondiente se proporciona:
| Tipos Definido en el encabezado <stdfloat> |
Sufijo literal | Macro predefinida | Tipo de lenguaje C | Propiedades del tipo | |||
|---|---|---|---|---|---|---|---|
| bits de almacenamiento | bits de precisión | bits de exponente | exponente máximo | ||||
| float16_t | f16 o F16
|
__STDCPP_FLOAT16_T__
|
_Float16
|
16 | 11 | 5 | 15 |
| float32_t | f32 o F32
|
__STDCPP_FLOAT32_T__
|
_Float32
|
32 | 24 | 8 | 127 |
| float64_t | f64 o F64
|
__STDCPP_FLOAT64_T__
|
_Float64
|
64 | 53 | 11 | 1023 |
| float128_t | f128 o F128
|
__STDCPP_FLOAT128_T__
|
_Float128
|
128 | 113 | 15 | 16383 |
| bfloat16_t | bf16 o BF16
|
__STDCPP_BFLOAT16_T__
|
(N/A) | 16 | 8 | 8 | 127 |
Notas
El tipo
std::bfloat16_t
se conoce como
Brain Floating-Point
.
A diferencia de los tipos de enteros de ancho fijo , que pueden ser alias de tipos de enteros estándar , los tipos de punto flotante de ancho fijo deben ser alias de tipos de punto flotante extendidos (no float / double / long double ), por lo tanto no son reemplazos directos para tipos de punto flotante estándar.
Ejemplo
#include <stdfloat> #if __STDCPP_FLOAT64_T__ != 1 #error "64-bit float type required" #endif int main() { std::float64_t f = 0.1f64; }
Referencias
- Estándar C++23 (ISO/IEC 14882:2024):
-
- 6.8.3 Tipos de punto flotante extendidos opcionales [basic.extended.fp]