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