std::cout avec un nombre flottant

Je suis à l'aide de visual studio 2015 à imprimer deux nombres flottants:

double d1 = 1.5;
double d2 = 123456.789;

std::cout << "value1: " << d1 << std::endl;
std::cout << "value2: " << d2 << std::endl;

std::cout << "maximum number of significant decimal digits (value1): " << -std::log10(std::nextafter(d1, std::numeric_limits<double>::max()) - d1) << std::endl;
std::cout << "maximum number of significant decimal digits (value2): " << -std::log10(std::nextafter(d2, std::numeric_limits<double>::max()) - d2) << std::endl;

L'impression est la suivante:

value1: 1.5
value2: 123457
maximum number of significant decimal digits (value1): 15.6536
maximum number of significant decimal digits (value2): 10.8371

Pourquoi 123457 est imprimer pour la valeur 123456.789? Ne ANSI C++ spécification permettent d'afficher quoi que ce soit pour les nombres flottants lorsque std::cout est utilisé sans std::setprecision()?

"Ne ANSI C++ spécification permettent d'afficher quoi que ce soit pour les nombres flottants lorsque std::cout est utilisé sans std::setprecision()?" la réponse est oui.
juste, je veux dire std::cout.
pourquoi le cahier des charges est très vague sur ce sujet? Il serait utile que les développeurs si la spécification est plus spécifique (comme l'impression que le nombre flottant avec ses chiffres significatifs). Quelque chose comme printf("%.16 g\n", d).
La précision par défaut est de 6, tout comme pour printf.
droit std::cout.précision() donne 6. La spécification est bien définie. Merci.

OriginalL'auteur Daniel Laügt | 2015-11-22