wyjścia poniższym przykładzie 0.29847 kiedy było spodziewać 0.29848:Czy setprecision w C++ round? Jeśli tak, dlaczego to widzę?
double f = 0.298475;
cout << setprecision(5) << f << endl;
Dla innych przykładów, jednak obserwuję zaokrąglenia:
double f = 0.123459;
cout << setprecision(5) << f << endl;
Wyjścia: 0,12346
i
double f = 0.123454;
cout << setprecision(5) << f << endl;
Wyjścia: 0.12345
0.298474999999999990318855225268634967505931854248046875, a dokładniej. – dan04
Innymi słowy, są dwa kroki zaokrąglania: jeden, gdy literał '0.298475' jest konwertowany na' podwójne', a drugi podczas drukowania pewnej liczby cyfr na 'cout'. – aschepler
@ dan04: To jest nieco pozbawiony znaczenia wyświetlacz; 64-bitowy float IEEE754 zawiera tylko około 17 cyfr dziesiętnych wartości informacji ... –