J'essaie d'imprimer l'expansion décimale d'un nombre rationnel dans C. Le problème que j'ai est que lorsque je divise le numérateur par le dénominateur, je perds la précision. C rassemble la partie répétée quand je ne le veux pas.
Par exemple, 1562/4995 = 0.3127127127 ... Mais dans mon programme, je reçois 1562/4995 = 0.312713. Comme vous pouvez voir une partie du nombre dont j'ai besoin a été perdue. p>
existe-t-il un moyen de spécifier C afin de préserver un niveau de précision décimale plus élevé? p>
J'ai essayé de déclarer le résultat en tant que double, long double et flotteur. J'ai également essayé de diviser l'expansion en 2 entiers séparés par un "." P>
Cependant, les deux méthodes n'ont pas réussi. p> Je m'attendais à ce que la sortie soit 1562/4995 = 0,3127127127 ... mais la sortie réelle est 1562/4995 = 0.312713 P> P>
3 Réponses :
Le spécificateur de format aussi, le type % f code> sur printf code> montre 6 chiffres après le point décimal par défaut. Si vous souhaitez afficher plus de chiffres, utilisez un spécificateur de précision: double code> peut uniquement stocker avec précision 16 chiffres décimaux de précision. P > p>
Vous devez modifier votre format de sortie, comme celui-ci:
scanf("%f", &result); // Not correct
scanf("%lf", &result); // Correct
Le drapeau l code> n'est pas valide dans ce cas. Un float code> transmis à une fonction variadique est implicitement promu à double code>.
@dbush n'est pas résultat code> réellement un double code> selon la question?
@dbush inutile, oui; Invalid, non! Mais c'est bon IMHO de s'habituer à la spécification de formats explicites.
Si l'impression est tout ce que vous voulez faire, vous pouvez le faire avec la même division longue que vous avez été enseignée dans l'école primaire:
Merci de me montrer cela, je n'ai jamais pensé à le faire de cette façon et c'est vraiment intelligent
Pas de duplication exacte, mais voir Ce . Cela peut vous donner des idées.
Regardez dans gmplib.org
Spécification d'un
float code> comme0.3127127127 ... code> probablement ne sera pas précis. Unfloat code> le plus souvent n'a que 7 chiffres décimaux de précision.