stdfloat 中的 floatN_t 是否保证符合 IEEE 标准?

Sou*_*a B 24 c++ floating-point language-lawyer c++23

与基本类型 \xe2\x80\x93和\xe2\x80\x93 不同float, C++23 中引入的新类型将始终是 IEEE 标准二进制浮点类型吗?doublelong doublefloatN_t<stdfloat>

\n

固定宽度浮点的 cppreference 页面确实提到了精度和指数位,这与 IEEE 标准相匹配。但该页面并未在任何地方明确提及 IEEE 标准。IEEE 兼容的浮点意味着,它们不仅应该具有相同的精度和指数位,而且该标准还列出了必须以符合标准的方式支持的许多操作。那么这些类型是否严格遵循这一点呢?

\n

Adr*_*ica 15

是的。C++23 标准最新草案(如下引用)的相关部分明确提到了类型的 ISO/IEC/IEEE 60559 浮点标准float*_t。根据维基百科,这与 IEEE-754 标准相同:

\n
\n

国际标准ISO/IEC/IEEE 60559:2011(内容与 IEEE 754-2008 相同)已根据 ISO/IEEE PSDO 协议通过 ISO/IEC JTC 1/SC 25 批准采用并发布。

\n
\n

以下是 C++23 标准草案相关部分的第一部分(其他“精度”类型的定义类似):

\n
\n

6.8.3 可选扩展浮点类型 \xc2\xa0\xc2\xa0\xc2\xa0[basic.extended.fp]
\n 1 \xc2\xa0\xc2\xa0\xc2\xa0 如果实现支持\n扩展浮点类型 ([basic.fundamental]),其属性\n由 ISO/IEC/IEEE 60559 浮点交换格式\n二进制 16 指定,然后 typedef -name std\xe2\x80\x8b::\xe2\x80\x8bfloat16_\xc2\xad t\n在标头中定义<stdfloat>并命名此类类型,定义了宏([cpp.predefined]),并且支持__STDCPP_\xc2\xadFLOAT16_\xc2\xadT__浮点文字后缀f16和([lex.fcon])。\n\xe2\x80\xa6 \n (\xe2\x80\xa6 与等类似)F16

float32_tfloat64_t

\n
\n

注意:就引用的段落是否要求此类类型的操作符合 IEEE/ISO 标准而言,我认为确实如此。此类变量的“属性”包括它们的行为,而不仅仅是它们的表示格式。

\n


Chr*_*sMM 7

是的,他们是。

[stdfloat.syn]指出

该标头定义了 [basic.extended.fp] 中指定的可选扩展浮点类型的类型别名。

反过来,引用由ISO/IEC/IEEE 60559 浮点交换格式[basic.extended.fp]指定的类型

ISO/IEC/IEEE 60559 是 754 的更新版本