разница в печати ноль в cout и printf

с

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? это машина эпсилон? и почему я получаю это, а не ноль?

1

Решение

std::cout по умолчанию для переменных с плавающей запятой аналогично %g флаг, а не %lf флаг в printf, Чтобы получить такое же поведение, вы должны пройти std::fixed к потоку, например:

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

Другие решения


По вопросам рекламы [email protected]