在cout和printf中打印零的差异

时间:2014-11-15 14:18:25

标签: c++ printf cout zero epsilon

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?为什么我得到它而不是零?

1 个答案:

答案 0 :(得分:4)

默认情况下,浮点变量的

std::cout类似于%g标志,而不是%lf中的printf标志。为了获得相同的行为,您必须将std::fixed传递给流,例如:

std::cout << std::fixed << 0.9+0.1+-1.0;