J'écris un morceau de code pour convertir des valeurs doubles en notations scientifiques jusqu'à une précision de 15 en C++. Je sais que je peux utiliser des librairies standards comme sprintf avec l'option% e pour le faire. Mais je devrais sortir avec ma propre solution. J'essaie quelque chose comme ça.double à la conversion de notation scientifique - erreur de précision
double norm = 68600000;
if (norm)
{
while (norm >= 10.0)
{
norm /= 10.0;
exp++;
}
while (norm < 1.0)
{
norm *= 10.0;
exp--;
}
}
Le résultat que je reçois est
norm = 6.8599999999999994316;
exp = 7
La raison de perdre cette précision, je clarifiais de ce question
Maintenant, j'essaie d'arrondir la valeur à la précision de 15, qui résulterait dans
6.859 999 999 999 999
(son évident que depuis le 16e point décimal est inférieur à 5 nous obtenons ce résultat)
Réponse attendue: norm = 6,860 000 000 000 000, exp = 7
Ma question est, est-il une meilleure façon pour le double à la notation de notation scientifique à la précision de 15 (sans utiliser les libs standard), de sorte que j'obtiendrais exactement 6.86 quand je l'arrondirai. Si vous avez remarqué le problème ici est pas avec le mécanisme d'arrondi, mais avec le double à la conversion de la notation scientifique due à la perte de précision liée à la machine epsilon
Votre norme initiale sera toujours un nombre entier? – Hayden
Non Il peut également s'agir de valeurs décimales. – vibz