¿Setprecision en c ++ round? Si es así, ¿por qué estoy viendo esto?

El siguiente fragmento de código genera 0.29847 cuando habría esperado 0.29848:

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

Para otros ejemplos, sin embargo, observo redondeo:

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

salidas: 0.12346

y

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

salidas: 0.12345

Respuestas a la pregunta(2)

Su respuesta a la pregunta