YoKoM3n
Messages postés3Date d'inscriptionsamedi 21 mars 2009StatutMembreDernière intervention14 avril 2009
-
Modifié le 13 janv. 2022 à 20:50
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 2013
-
14 avril 2009 à 13:36
Bonjour à tous,
Dans le cadre de nos cours d'info (programmation en C), on doit réaliser un programme qui calcul le sinus d'un angle.
J'ai utilisé le DL de sinus pour y parvenir. La compilation marche sans soucis mais lorsque je veux calculer le sinus de 90 avec un DL à l'ordre 10, le programme me renvoie pas de resultat:
" La valeur de sinus 90 avec un DL d'ordre 10 est: -1.#IND00"
Je vous poste mon code, j'éspère que quelqu'un pourra m'aider.
Merci d'avance
Cordialement,
YoKo
Voici le code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// fonction puissance: x puissance n avec precision double.
double power(double x, double n)
{
double y=1;
int a=1;
if(n==0)
{
return 1;
}
else
{
while (a<=n)
{
y=y*x;
a++;
}
return y;
}
}
// factorielle d'un nombre: precision double.
double fact(double c)
{
int i;
double n,fact=1;
for(i=1,fact=1;i<c+1;i++)
{
fact*=i;
return fact;
}
}
// programme principal
int main()
{
double x,s,n;
int i;
printf("Donner la valeur de x\n");
scanf("%lf",&x);
printf("Donner l'ordre du DL\n");
scanf("%lf",&n);
s=x;
// Le DL de sinus:
for(i=1;i<=n;i++)
{
s+=(power(-1,i))*((power(x,2*x+1))/(fact((double)2*i+1)));
}
printf("la valeur de sin %lf au DL d'ordre %lf est %lf:\n\n",x,n,s);
printf("la valeur exact de sin %lf est %lf\n\n",x,sin(x));
return 0;
}
YoKoM3n
Messages postés3Date d'inscriptionsamedi 21 mars 2009StatutMembreDernière intervention14 avril 2009 Modifié le 13 janv. 2022 à 20:51
J'ai refais la même chose en convertissant le nombre en radian:
Je ne vois pas trop où est l'erreur...
Voici le code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// fonction puissance: x puissance n avec precision double.
double power(double x, double n)
{
double y=1;
int a=1;
if(n==0)
{
return 1;
}
else
{
while (a<=n)
{
y=y*x;
a++;
}
return y;
}
}
// factorielle d'un nombre: precision double.
double fact(double c)
{
int i;
double n,fact=1;
for(i=1,fact=1;i<c+1;i++)
{
fact*=i;
return fact;
}
}
// programme principal
int main()
{
double s,x;
int i,n;
printf("Donner la valeur de x\n");
scanf("%lf",&x);
printf("Donner l'ordre du DL\n");
scanf("%d",&n);
s=x*(M_PI/180);
// Le DL de sinus:
for(i=1;i<=n;i++)
{
s=s+(power(-1,i))*(power(x*(M_PI/180),2*i+1)/fact(2*i+1));
}
printf("la valeur de sin %lf au DL d'ordre %d est %lf:\n\n",x,n,s);
printf("la valeur exact de sin %lf est %lf\n\n",x,sin(x));
printf("La valeur de Pi est %lf\n",M_PI);
return 0;
}
Dans ce cas je trouve pour sin 90 avec ordre 10:
Donner la valeur de x
90
Donner l'ordre du DL
10
la valeur de sin 90.000000 au DL d'ordre 10 est 9349.193177:
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 Modifié le 13 janv. 2022 à 20:51
Salut
Voila un prog qui marche: (les modifs sont faites en rouge)
double fact(double c)
{
int i;
double n,fact=1;
for(i=1,fact=1;i<c+1;i++)
fact*=i;
return fact;
}
// programme principal
int main()
{
double s,x;
int i,n;
printf("Donner la valeur de x\n");
scanf("%lf",&x);
printf("Donner l'ordre du DL\n");
scanf("%d",&n);
x=x*(M_PI/180.0);
// Le DL de sinus:
s=0;
for(i=0;i<=n;i++)
s=s+(pow(-1.0,(double)i))*(pow((double)x,(double)(2*i+1))/fact(2*i+1));
printf("la valeur de sin %lf au DL d'ordre %d est %lf:\n\n",x,n,s);
printf("la valeur exact de sin %lf est %lf\n\n",x,sin(x));
printf("La valeur de Pi est %lf\n",M_PI);
return 0;
}
A+
____________________________________________________________________________
Mon site internet :