http://www.mpfr.org/
Version imprimable
ok medinoc, je vais éssayais ça.merci
Jean-Marc.Bourguet, j'ai peut-être mal lu la page internet que vous me donnez (c'est de l'anglais et je ne suis pas particulièrement fort dans cette langue) mais j'ai cru comprendre qu'il s'agissait d'augmenter la précision par le nombre de déimales. Je souhaite seulement avoir accès à des nombres plus grand (pour des factorilles).
Quand on lit:Citation:
Envoyé par Rniamo
on l'a l'impression qu'il y a un manque de précision en cause aussi.Citation:
J'ai entendu parlé des long double mais il ne marche pas bien (ils me décalent la virgule du nombre et c'est tout et donc j'ai un résultat juste...à 10^10 près!)
mpfr permet aussi d'avoir des nombres plus grands.
Sinon une idée est de travailler en logarithme.
concernant les pointeurs de fonction, je fais une fausse manipulation mais je ne la vois pas (l'intégration ou la dérivation) ; voici mon code :
typedef int (*PtrFonct)(double);
/* intégration de f entre a et b */
double integ(double a,double b,int (&pointeurfonction)(double))
{
double resultat=1;
return resultat;
double resultat,test;int bin;resultat=0;test=0;bin=0;
for (int n=0;bin!=1;n=n+1)
{
test=resultat;
resultat=resultat+(((b-a)/n)*f(a+n*((b-a)/n)));
if (test==resultat)
{
bin=1;
}
}
return resultat;
}
/* corps du programme */
int main()
{
PtrFonct pf;pf=cos;
printf("Taper le point de calcul\nx=");
scanf("%lf",&val);
printf("cos(%f)=%f\n",val,cos(val));
printf("sin(%f)=%f\n",val,sin(val));
printf("exp(%f)=%f\n",val,exp(val));
printf("integ(0,2*pi,cos)(%f)=%f\n",val,integ(0,1,f)(val));
system("PAUSE" );
return 0;
}
Tu es alergique à l'utilisation des balises code? C'est pourtant plus clair.
Est-ce que le return à la deuxième ligne d'integ est volontaire?
Qu'est-ce que tu obtiens et à quoi t'attendais-tu?
en fait les 2 1ere ligne ne le sont pas (sinon mon intégration vaut 1 tout le temps). mais ou est l'erreur sur les pointeurs de fonction??
On a déjà commenté la dessus.Citation:
Code:double integ(double a,double b,int (&pointeurfonction)(double))
À nouveau, qu'est-ce que tu obtiens, à quoi t'attendais-tu?
j'obtient une erreur :
L:\Programmation\C\dl\exp_cos_sin_en dl.c:29: error: invalid conversion from `double (*)(double)' to `int (*)(double)'
L:\Programmation\C\dl\exp_cos_sin_en dl.c:31: error: `val' undeclared (first use this function)
L:\Programmation\C\dl\exp_cos_sin_en dl.c:35: error: `f' undeclared (first use this function)
il y aurait une conversion invalide entre type int et double : c'est le pointeur mais je ne vois pas l'erreur
Ce n'est pas une erreur, c'est trois. Vu qu'il y a d'autres erreurs dans le code que tu montres ci-dessus, tu as déjà dû fixer des choses. Les deux dernières tu devrais être capables de les corriger tout seul aussi. Pour t'aider à comprendre la première:Citation:
Envoyé par Rniamo
double (*)(double) se lit 'pointeur vers une fonction avec un double comme paramètre et retournant un double'
int (*)(double) se lit 'pointeur vers une fonction avec un double comme paramètre et retournant un int'
Donc en ligne 29 tu ne passes pas un pointeur du bon type. J'ai comme l'impression que le problème est à la déclaration de la fonction plutôt qu'à son appel.
Au fait, on voit bien que tu as lu mon code en diagonale: C'est bien la peine de définir un typedef "pointeur de fonction" si c'est pour ne pas l'utiliser...
ben pour le typedef, je l'avais mis mais j'avais quand même une erreur donc je l'ai remplacé ... mais j'ai toujours l'erreur ; pareil pour le type du pointeur : j'avais mis double mais ça ne marchait pas donc j'ai éssayé int...
1ere question : Medinoc, j'ai une question très bête certainement mais est-ce-que "PTR_DBL_FUNC_DBL " est important? (c'est-à-dire est-ce que je peux mettre autr chose?)
Parce que je ne l'avais pas écrit comme ça et en le mettant ça a compilé...(Merci au passage à tous ceux qui m'ont aidé sur les pointeurs de fonction)
2eme question : y a pas plus simple que mpfr? parce que faut réécrire les opérations déjà faite je crois...
désolé, j'ai encore posé une question bête : bien sûr qu'on peut changer de nom le type
Donc ma dernière question sera comment programmer une fonction autrement que par un développement limité (ex : cos, sin, exp...)
j'ai trouvé un problème : dans ma fonction integ [ integ(a,b,f) ] je calcul un f(a,b,n) avec n int et f double...faut convertir avant je suppose
ça y est! ça marche!!! Marci à tous pour vos précieux conseils et votre patience.