与
printf("%lf\n",-1.0+0.9+0.1);
结果是
0.000000
与
cout<<-1.0+0.9+0.1;
结果是
2.77556e-17
再次,如果我改变
cout<<0.9+0.1+-1.0;
结果是
0
为什么这种不同的行为只是简单地反转总和?为什么2.77556e-17?它是机器epsilon?为什么我得到它而不是零?
答案 0 :(得分:4)
std::cout
类似于%g
标志,而不是%lf
中的printf
标志。为了获得相同的行为,您必须将std::fixed
传递给流,例如:
std::cout << std::fixed << 0.9+0.1+-1.0;