Типы с плавающей запятой фиксированной ширины (начиная с C++23)
Если реализация поддерживает любой из следующих ISO 60559 типов в качестве расширенного типа с плавающей запятой, то:
- соответствующий макрос определён как
1для указания поддержки, - доступен соответствующий суффикс литерала с плавающей запятой, и
- предоставлено имя соответствующего псевдонима типа:
| Типы Определён в заголовке <stdfloat> |
Суффикс литерала | Предопределённый макрос | Тип из языка C | Свойства типа | |||
|---|---|---|---|---|---|---|---|
| бит для хранения | бит точности | бит порядка | макс. порядок | ||||
| float16_t | f16 или F16
|
__STDCPP_FLOAT16_T__
|
_Float16
|
16 | 11 | 5 | 15 |
| float32_t | f32 или F32
|
__STDCPP_FLOAT32_T__
|
_Float32
|
32 | 24 | 8 | 127 |
| float64_t | f64 или F64
|
__STDCPP_FLOAT64_T__
|
_Float64
|
64 | 53 | 11 | 1023 |
| float128_t | f128 или F128
|
__STDCPP_FLOAT128_T__
|
_Float128
|
128 | 113 | 15 | 16383 |
| bfloat16_t | bf16 или BF16
|
__STDCPP_BFLOAT16_T__
|
(N/A) | 16 | 8 | 8 | 127 |
Примечания
Тип
std::bfloat16_t
известен как
Brain Floating-Point
.
В отличие от целочисленных типов фиксированной ширины , которые могут быть псевдонимами стандартных целочисленных типов , типы с плавающей точкой фиксированной ширины должны быть псевдонимами расширенных типов с плавающей точкой (не float / double / long double ), поэтому они не являются прямой заменой стандартных типов с плавающей точкой.
Пример
#include <stdfloat> #if __STDCPP_FLOAT64_T__ != 1 #error "64-bit float type required" #endif int main() { std::float64_t f = 0.1f64; }
Ссылки
- Стандарт C++23 (ISO/IEC 14882:2024):
-
- 6.8.3 Дополнительные расширенные типы с плавающей запятой [basic.extended.fp]