2010-11-09 6 views
0

Donc, j'essaie de calculer une certaine valeur à une précision plutôt grande. L'expression C est:Obtenez une précision d'environ 20-30 chiffres en C

long double t = 2.0L+.2L*(sp)+s.missRate*50L; 

mon résultat est: 11.575345

Mais le résultat 'réel' est: 11.575345222971968

J'utilise long double, qui sont le plus grand type primitif AFAIK. Je ne devrais pas avoir à utiliser de bibliothèques de précision pour le faire. Alors, quel type de C a ce genre de précision?

+1

Etes-vous sûr que ce n'est pas un problème d'affichage? 'double' devrait avoir 15-16 chiffres significatifs et votre résultat n'a que 8. – dan04

+0

Comment faire? J'utilise printf ("% Lf", ..) – mamidon

+1

printf ("% 19f", ..) – cababunga

Répondre

4

Le résultat est probablement assez précis, mais vous l'imprimez arrondie à 6 chiffres après la virgule. Augmentez votre précision d'impression, comme ceci:

long double var; 
printf("%.20Lf\n", var); //20 digits after the radix 
+0

Je l'ai fait, j'aurais dû faire: – mamidon

+0

Crap, entrez = soumettre un commentaire ... de toute façon, à la place de% LF vous devez faire% .xLF où x est le nombre de chiffres après la décimale que vous voulez. – mamidon

+0

Vous pouvez modifier vos commentaires pendant une courte période après la soumission, vous savez :). – slacker

0

Le type double ne supporte pas plus d'environ 16 chiffres décimaux (http://en.wikipedia.org/wiki/IEEE_754). Donc, ne comptez pas sur le supplément de 4-14 que vous mentionnez dans le titre.

Pour obtenir plus je vous suggère de se tourner vers gmplib.org

Questions connexes