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,double和long double.
以下是最小精度值的宏.
FLT_DIG 6 or greater
DBL_DIG 10 or greater
LDBL_DIG 10 or greater
如果我把这些宏面值,我会假设float有最少6小数精度,而double和long double有10最低小数精度然而,作为一个大男孩,我知道,有些事情可能是好得是真的.
因此,我想知道.浮点数,双精度数和长双精度数是否保证最小小数精度,这个最小小数精度是上面给出的宏的值?
如果没有,为什么?
注意:假设我们使用的是编程语言C++.
如果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,这是规范性文本.
免责声明:可能有额外的措辞提供我没有注意到的保证.不太可能,但可能.
| 归档时间: |
|
| 查看次数: |
1050 次 |
| 最近记录: |