Если реализация поддерживает любой из следующих
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]
Смотрите также