1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
//ici, on demande une précision à quatre chiffres apres la virgule
#define PREC 0.0001
double cosinus(double calcul)// calcul étant un angle en degré
{
// l'angle en radian (directement calculé)
double x=calcul*3.1415926/180;
//le résultat à renvoyer
double resultat=1.0;
//un résultat temporaire
double restemp;
//coefficient utilisé pour les formule de (x^N/N!)
int coef=2;
//pour calculer de x^coefficient
double exposant;
//pour savoir s'il faut additionner ou soustraire
int plus=-1;
int encore=0;
//pour calculer la factorielle du coefficient
int factorielle;
//un compteur pour les boucle
int i;
do
{
//sauvegarde du résultat précédent pour comparaison
restemp=resultat;
exposant=x;
factorielle=1;
//calcule de x^n
for(i=1;i<coef;i++)
exposant*=x;
//calcul de la factorielle (coef!)
for(i=1;i<=coef;i++)
factorielle*=i;
//calcul de la nouvelle valeur approchée
//une fois sur deux on additionne, et la fois d'apres on soustrait
//à vrai dire, on commence par soustraire
if(plus==1)
{
resultat+=(exposant/factorielle);
plus=0;
if(resultat-PREC<restemp)
encore=1;
}
else
{
resultat-=(exposant/factorielle);
plus=1;
if(resultat+PREC>restemp)
encore=1;
}
//on prépare la valeur suivante
coef+=2;
}while(encore!=1);
return resultat;
} |