Fixed width floating-point types (since C++23)
From cppreference.com
If the implementation supports any of the following types, the corresponding macro is predefined, floating-point literal suffix is available, and the typedef name is provided:
Type name
|
Literal suffix | Predefined macro | C language type | type properties | |||||
---|---|---|---|---|---|---|---|---|---|
bits of storage | bits of precision | bits of exponent | max exponent | ||||||
std::float16_t | f16 or F16 | __STDCPP_FLOAT16_T__ | _Float16 | 16 | 11 | 5 | 15 | ||
std::float32_t | f32 or F32 | __STDCPP_FLOAT32_T__ | _Float32 | 32 | 24 | 8 | 127 | ||
std::float64_t | f64 or F64 | __STDCPP_FLOAT64_T__ | _Float64 | 64 | 53 | 11 | 1023 | ||
std::float128_t | f128 or F128 | __STDCPP_FLOAT128_T__ | _Float128 | 128 | 113 | 15 | 16383 | ||
std::bfloat16_t | bf16 or BF16 | __STDCPP_BFLOAT16_T__ | (n/a) | 16 | 8 | 8 | 127 |
Contents |
Notes
The type std::bfloat16_t is known as Brain Floating Point.
Unlike the fixed width integer types, which may be aliases to standard integer types, the fixed width floating-point types must be aliases to extended floating point types (not float / double / long double).
Example
Run this code
#include <stdfloat> int main() { std::float64_t f = 0.1f64; }
References
- C++23 standard (ISO/IEC 14882:2024):
- 6.8.3 Optional extended floating-point types [basic.extended.fp]