G ++浮点精度

时间:2016-01-12 15:18:03

标签: c++ gcc floating-point g++

我在C ++程序中有这些行,

auto f = log (FLT_MAX / 4);
printf("%e", f);
cout << f;

printf结果是8.733654e + 1,但是cout给了我87.3365。我检查了32位十六进制值,它们分别是0x3f5f94e0和0x3f5f94d9,这意味着,似乎有足够的精度来准确表示该值。

你知道为什么cout正在截断浮点值吗?

2 个答案:

答案 0 :(得分:1)

这与g ++无关。

你应该做的是:

#include <limits>
#include <iomanip>

std::cout << std::setprecision(std::numeric_limits<double>::digits10+1) << f;

您还可以使用long double代替double来获得最大可用精度。

文档

答案 1 :(得分:1)

  

你知道为什么cout会截断那个浮点值吗?

因为默认的精度C ++流设置为6。

您可以使用std::setprecision更改精度。