我现在对此感到惊叹:
C++ 11
#include <iostream>
#include <iomanip>
#include <limits>
int main()
{
double d = 1.305195828773568;
std::cout << std::setprecision(std::numeric_limits<double>::max_digits10) << d << std::endl;
// Prints 1.3051958287735681
}
Python
>>> repr(1.305195828773568)
'1.305195828773568'
发生了什么事,为什么在C++中多出了1?
到目前为止,我认为C++和Python在底层使用相同的64位IEEE双精度浮点数;两种格式化函数都应该打印全精度。
repr
的属性是eval(repr(x)) == x
,而不是将数字打印为所有小数位。如果您想要k
个小数位的精度,则应使用适当的格式化函数。 - Bakuriu