我在C ++程序中有这些行,
auto f = log (FLT_MAX / 4);
printf("%e", f);
cout << f;
printf
结果是8.733654e + 1,但是cout
给了我87.3365。我检查了32位十六进制值,它们分别是0x3f5f94e0和0x3f5f94d9,这意味着,似乎有足够的精度来准确表示该值。
你知道为什么cout
正在截断浮点值吗?
答案 0 :(得分:1)
这与g ++无关。
你应该做的是:
#include <limits>
#include <iomanip>
std::cout << std::setprecision(std::numeric_limits<double>::digits10+1) << f;
您还可以使用long double
代替double
来获得最大可用精度。
答案 1 :(得分:1)