с
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? это машина эпсилон? и почему я получаю это, а не ноль?
std::cout
по умолчанию для переменных с плавающей запятой аналогично %g
флаг, а не %lf
флаг в printf
, Чтобы получить такое же поведение, вы должны пройти std::fixed
к потоку, например:
std::cout << std::fixed << 0.9+0.1+-1.0;