在上一个问题“Is floating point precision mutable or invariant?”中,我收到了一个response,其中说:



我查了这些宏。它们位于头<cfloat>中。他们从cplusplus reference page中列出了floatdoublelong double的宏。

这是最小精度值的宏。



如果我将这些宏作为面值使用,我会假设float的最小十进制精度为6,而doublelong double的最小十进制精度为10。但是,作为一个大男孩,我知道有些事情可能是难以置信。

因此,我想知道。浮点数, double 数和长 double 数是否具有保证的最小十进制精度,并且这个最小十进制精度是上面给出的宏的值吗?

如果没有,为什么?

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

最佳答案

如果 std::numeric_limits< F >::is_iec559 为true,则IEEE 754 standard的保证适用于浮点类型F。

否则(无论如何),C标准规定了诸如DBL_DIG之类的符号的最小允许值,对于库而言,毫无疑问,“通过引用并入[C++]国际标准中”,如C++ 11§所引用。 17.5.1.5/1。

编辑:
正如TC在此处的评论中指出的那样,



不幸的是,从形式上看,首先C++ 11的引用来自第17.5节,它只是信息丰富的,不是规范的。其次,C标准中的措辞是规定的最小值。该部分(C99标准的附录E)中的内容丰富,不具有规范性。因此,尽管可以将其视为实践中的保证,但它不是正式的保证。

一个有力的迹象表明float的实际最低精度为6个十进制数字,没有实现会给出更少的精度:

输出操作默认为精度6,这是标准文本。

免责声明:可能还有其他措辞可以提供我没有注意到的保证。不太可能,但是可能。

关于c++ - 浮点数, double 和长 double 是否保证最低精度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30587807/

10-11 22:53
查看更多