【发布时间】:2020-10-13 16:13:12
【问题描述】:
直觉上,我认为长双精度数的小数位比双精度数多,双精度数的小数位比浮点数多,但是,如果是这样,为什么 std::cout 会以相同的小数精度打印出浮点数、双精度数和长双精度数,即使它们对所有原始数据类型都有重载?
C++源代码:
#include <iostream>
#define PI 3.1415926535897932384626433832;
int main()
{
float f = PI;
double d = PI;
long double ld = PI;
std::cout << f << std::endl;
std::cout << d << std::endl;
std::cout << ld << std::endl;
return 0;
}
输出:
3.14159
3.14159
3.14159
【问题讨论】:
-
所有类型的花车只有一种设置。浮点、双精度和长双精度不能有不同的精度。
-
@ThomasSablik 这不是为什么标准委员会选择这样做的动机。
-
@MarekR 该标准可以很容易地指定诸如“足以使表示在该精度下明确”之类的内容。这意味着库需要知道特定于实现的细节,但情况已经如此,例如在
std::numeric_limits。事实上,这样一个假设的实现甚至可以使用std::numeric_limits! -
@MarekR 仅当使用的浮点类型在这两个平台上具有不同的精度时,在这种情况下,这两个平台上已经有不同的结果。
标签: c++ decimal std cout stringstream