Bonjour à tous,

J'espère être dans la bonne section!

Voilà dans le cadre de nos cours d'info (programmation en C), on doit réaliser un code qui permette de calculer le sinus d'un angle. Pour ce faire j'ai utilisé la méthode du developpement en série.

Mais j'ai l'impression que je trouve un resultat plutôt étrange...

Est ce que vous pourriez jeter un oeil à mon code et me dire ce qui ne va pas ?

Merci d'avance

YoKo

Voici le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#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); // je convertie en radian ici.
 
// 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;
}
A titre d'exemple pour sinus 90 je trouve:

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:

la valeur exact de sin 90.000000 est 0.893997