Bonjour,

J'essai de calculer la valeur de sin(x) (et de cos(x)) avec une série de Taylor et plus la valeur de x augmente plus l'erreur de calcul est élevée ce qui est normal je sais... Ma question est, comment du code C++ sur un ordinateur n'est pas plus précis que ma calculatrice??? Y a-t-il une façon de contourner cela? J'aimerais au moins avoir la même quantité de chiffre significatif que ma calculatrice..

Mes variables sont en double..

Merci infiniment!

PS. mon programme contient d'autres partie que j'ai effacé pour simplifier alors ne vous attardez pas sur les "switch/case" vides...

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
 
#include <iostream>
#include <iomanip>
 
 
using namespace std;
 
void main (void)
{
    double CalculFactoriel( int Exposant);
    double CalculPuissance( double X, int Exposant);
    int Resultat, Exposant, Signe;
    double ResultatSin, ResultatCos, X;
    double Factoriel, Puissance;
 
 
        cout << "Votre choix : ";
    cin >> Choix;
    cin.sync();
 
 
 
 
    switch(Choix)
    {
    case 1:        break;
 
    case 2:         break;
 
    case 3:  system("cls");
            cout << "Calculons la valeur de sin(x)"<< endl << "Entrer la valeur de x = " << endl;
            cin.sync();
            cin >> X;
            cout<<endl<<endl;
 
            ResultatSin=0;
                        for(int n=0; n<=15; n++)
                         {
                            Exposant = (2*n)+1;
                            Factoriel = CalculFactoriel( Exposant );
                            Puissance = CalculPuissance( X, Exposant);
                            if( n%2 == 0)
                            {
                                Signe = 1;
                            }
                            if( n%2 != 0)
                            {
                                Signe = -1;
                            }
                            ResultatSin += (Signe*Puissance)/Factoriel;
 
 
                         }
            cout << setprecision (9) << ResultatSin <<endl;
            break;
 
    case 4: system("cls");
            cout << "Calculons la valeur de cos(x)"<< endl << "Entrer la valeur de x = " << endl;
            cin.sync();
            cin >> X;
            cout<<endl<<endl;
 
            ResultatCos=0;
                        for(int n=0; n<=15; n++)
                         {
                            Exposant = (2*n);
                            Factoriel = CalculFactoriel( Exposant );
                            Puissance = CalculPuissance( X, Exposant);
                            if( n%2 == 0)
                            {
                                Signe = 1;
                            }
                            if( n%2 != 0)
                            {
                                Signe = -1;
                            }
                            ResultatCos += (Signe*Puissance)/Factoriel;
 
 
                         }
            cout<< setprecision (9)<< ResultatCos <<endl;
            break;
 
    case 5: break;
 
    case 6: break;
    }
 
    system("pause");
  }
 
double CalculFactoriel( int Exposant)
{
    float ResulatFactoriel=1;
    while (Exposant > 0 )
    {
        ResulatFactoriel *= Exposant;
        Exposant=Exposant-1;
 
    }
    return ResulatFactoriel;
 
}
double CalculPuissance( double X, int Exposant)
{
    int compteur=1;
    double total=1;
    while (compteur<=Exposant)
    {
        total = total*X;    
 
        compteur=compteur++;
 
    }
    return total;
}