Czy setprecision w rundzie c ++? Jeśli tak, dlaczego to widzę?

Poniższy fragment wyświetla 0.29847, gdy oczekiwałbym 0.29848:

double f = 0.298475;
cout << setprecision(5) << f << endl;

Jednak dla innych przykładów obserwuję zaokrąglanie:

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