正确设置ostringstream的最大双精度的方法

时间:2010-02-25 00:56:55

标签: c++

参考

How do I print a double value with full precision using cout?

What is the meaning of numeric_limits<double>::digits10

我有点困惑。

我用过:

ss.precision(std::numeric_limits<double>::digits10);

ss.precision(std::numeric_limits<double>::digits10 + 2);

获得最大双精度?

2 个答案:

答案 0 :(得分:1)

它取决于数据中“十进制组件”的数量。

std :: numeric_limits :: digits10将给出“浮动组件”的最大数量

ios_base :: precision指定要显示的位数(十进制+浮点组件)。

如果您的小数部分总是小于100(-99到99),则下面的代码总是给出最大精度。

ss.precision(std::numeric_limits<double>::digits10 + 2);

答案 1 :(得分:0)

根据What is the meaning of numeric_limits<double>::digits10,特别是最高投票答案,std::numericlimits<double>::digits10是:

  

您可以表示的最大位数而不会损失精度。

这意味着如果你将ss.precision设置为,那么这些浮点数将是准确的;如果你将它设置为+2,你仍然会显示+ 2位数字,但不保证最后两位数字的准确计算。

对于仲裁精度,如果这是您所需要的,请查看mpirgmpmpfr