Je suis en train de construire un programme permettant de convertir des valeurs doubles en format de valeur scientifique (mantisse, exposant). Puis j'ai remarqué le ci-dessouserreur de double précision lors de la conversion à la notation scientifique
369.7900000000000 -> 3.6978999999999997428
68600000 -> 6.8599999999999994316
J'ai remarqué le même modèle pour plusieurs autres valeurs également. L'erreur maximale est fractionnée
0.000 000 000 000 001 = 1*e-15
Je sais que l'inexactitude dans la représentation des valeurs doubles dans un ordinateur. Peut-on en conclure que l'erreur fractionnelle maximale que nous obtiendrions est 1*e-15
? Qu'est-ce qui est important à ce sujet? Je suis passé à travers la plupart des questions sur le problème de précision à virgule flottante dans le débordement de pile, mais je n'ai pas vu sur l'erreur fractionnaire maximale en 64 bits.
Pour être clair sur le calcul que je fais, je l'ai mentionné mon extrait de code ainsi
double norm = 68600000;
if (norm)
{
while (norm >= 10.0)
{
norm /= 10.0;
exp++;
}
while (norm < 1.0)
{
norm *= 10.0;
exp--;
}
}
Maintenant je
norm = 6.8599999999999994316;
exp = 7
merci @ eigenchris pour cette explication. Maintenant, j'ai légèrement l'idée. Mais je ne comprends toujours pas comment mon erreur fractionnaire est supérieure à 2.22e-16. Selon la définition de la machine epsilon mon erreur fractionnaire devrait être inférieure à 2.22e-16 n'est-ce pas? btw J'ai ajouté mon code à la question – vibz
@vibz J'ai mis à jour ma réponse. L'erreur fractionnaire que j'ai eu était différente de la vôtre et est en dessous de la machine epsilon. Comment avez-vous calculé le vôtre? – eigenchris
qui explique tout @ eigenchris.My calcul de l'erreur fracturale était incorrecte. Je vous remercie :) – vibz