定宽浮点数类型 (C++23 起)
来自cppreference.com
如果实现支持以下任何 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__
|
(无) | 16 | 8 | 8 | 127 |
注解
类型 std::bfloat16_t 被称为 Brain 浮点数。
与可以是标准整数类型别名的定宽整数类型不同,定宽浮点数类型必然是扩展浮点数类型(而非 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:2024):
- 6.8.3 Optional extended floating-point types [basic.extended.fp]