Je comprends que numeric_limits :: max_digits10 donne le nombre maximum de chiffres après le point décimal qui sont disponibles. Mais si je SetPrecision() à une valeur qui est supérieure à cela, il me donne encore des chiffres non nuls au-delà de cette valeur max:imprimer 30 chiffres d'une valeur double en C++
assert(std::numeric_limits<double>::max_digits10 == 17);
std::cout << std::setprecision(30) << double(.1) << '\n';
Cette imprime:
0.100000000000000005551115123126
les chiffres sont-au-delà de 17 pas être fiable pour être précis?
Merci.
Lectures obligatoires: [Ce que tout chercheur en informatique doit savoir sur l'arithmétique en virgule flottante] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –
Le double est défini comme 1,7 E +/- 308 (15 chiffres) Vous pouvez donc aller jusqu'à 308 chiffres pour certains nombres. Mais lisez ce que @ThomasMatthews a suggéré en premier. –
La précision de 'double' n'est pas fixée comme ± 10^(- 17), elle dépend de la valeur du nombre. Les plus grandes valeurs ont une moins bonne précision, des nombres plus petits - mieux. En d'autres termes, ± erreur de valeur est déterminée par rapport à la valeur. Comme vous pouvez le voir, l'erreur pour le nombre x est d'environ ± 0.0000000000000000 * x – Pavel