浮点数,双打数和长双数是否具有保证的最小精度?

Wan*_*ool 6 c++ floating-point minimum language-lawyer floating-point-precision

从我之前的问题" 浮点精度是否可变或不变? "我收到一条回复说,

C提供DBL_DIG,DBL_DECIMAL_DIG,以及它们的float和long double对应物.DBL_DIG表示最小相对小数精度.DBL_DECIMAL_DIG可以被认为是最大相对小数精度.

我看了这些宏.它们位于标题中<cfloat>.从CPLUSPLUS参考页他们列出了宏float,doublelong double.

以下是最小精度值的宏.

FLT_DIG 6 or greater

DBL_DIG 10 or greater

LDBL_DIG 10 or greater

如果我把这些宏面值,我会假设float有最少6小数精度,而doublelong double有10最低小数精度然而,作为一个大男孩,我知道,有些事情可能是好得是真的.

因此,我想知道.浮点数,双精度数和长双精度数是否保证最小小数精度,这个最小小数精度是上面给出的宏的值?

如果没有,为什么?


注意:假设我们使用的是编程语言C++.

Che*_*Alf 5

如果std::numeric_limits<˚F>::is_iec559为真,那么的保证IEEE 754标准适用于浮点类型˚F.

否则(并且无论如何),DBL_DIGC标准规定的符号的最小允许值,对于库而言,无可争议地"通过引用并入[C++]国际标准",引自C++11§17.5 .1.5/1.

编辑:正如TC在评论中所述,

" <climits>和<cfloat>由§18.3.3[c.limits]规范地纳入; 最小值依次在C标准的第5.2.4.2.2节中规定

不幸的是,对于正式观点,首先引用C++ 11的内容来自第17.5节,它只是提供信息,而不是规范性的.其次,C标准中的措辞中指定的值是最小值的,也在一个(C99标准的附录E)中,它是提供信息的,而不是规范性的.因此,虽然它可以被视为实践中的保证,但它不是正式的保证.


一个强烈的迹象表明,实际最小精度为float6位十进制数字,没有实现会减少:

输出操作默认为精度6,这是规范性文本.

免责声明:可能有额外的措辞提供我没有注意到的保证.不太可能,但可能.