-1
votes

Comment définir le niveau de précision pour l'expansion décimale d'un nombre rationnel

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.

existe-t-il un moyen de spécifier C afin de préserver un niveau de précision décimale plus élevé?

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 "."

Cependant, les deux méthodes n'ont pas réussi. xxx

Je m'attendais à ce que la sortie soit 1562/4995 = 0,3127127127 ... mais la sortie réelle est 1562/4995 = 0.312713

c

3 commentaires

Pas de duplication exacte, mais voir Ce . Cela peut vous donner des idées.


Regardez dans gmplib.org


Spécification d'un float comme 0.3127127127 ... probablement ne sera pas précis. Un float le plus souvent n'a que 7 chiffres décimaux de précision.


3 Réponses :


2
votes

Le spécificateur de format % f sur printf 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: xxx

aussi, le type double peut uniquement stocker avec précision 16 chiffres décimaux de précision.


0 commentaires

0
votes

Vous devez modifier votre format de sortie, comme celui-ci:

scanf("%f", &result); // Not correct
scanf("%lf", &result); // Correct


3 commentaires

Le drapeau l n'est pas valide dans ce cas. Un float transmis à une fonction variadique est implicitement promu à double .


@dbush n'est pas résultat réellement un double selon la question?


@dbush inutile, oui; Invalid, non! Mais c'est bon IMHO de s'habituer à la spécification de formats explicites.



0
votes

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: xxx


1 commentaires

Merci de me montrer cela, je n'ai jamais pensé à le faire de cette façon et c'est vraiment intelligent