begin process at 2012 05 29 03:12:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

DL sinus en C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

DL sinus en C

lundi 13 avril 2009 à 20:58:23 | DL sinus en C

YoKoM3n

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;
}



mardi 14 avril 2009 à 09:32:05 | Re : DL sinus en C

ed73

Bonjour,

C'est un dépassement de capacité, power(x,2*x+1) c'est 90 puissance 181 !!!

Moi je convertirai x en radians avant de faire les calculs : x = x*3.14159/180;
La fonction sin(x) demande un x en radians.

 

 

mardi 14 avril 2009 à 11:40:18 | Re : DL sinus en C

YoKoM3n

Je crois que j'ai fait une erreur au niveau du calcul dans ma boucle, mais je ne suis pas sur. Ce n'est pas plutôt:

// Le DL de sinus:

for(i=0;i<=n;i++)
{
    s+=(power(-1,i))*((power(x,2*i+1))/(fact((double)2*i+1)));
}


Un i plutôt que x dans le calcul du DL, étant donné que l'on veut calculer le DL tant que i<=n (ordre du DL).

Malgré cela je trouve toujours un résultat étonnant:

Ex: sinus 90 au DL 10 me donne:

Donner la valeur de x
90
Donner l'ordre du DL
10
la valeur de sin 90 au DL d'ordre 10 est 109405482281847930000000000000000000000000.000000:

la valeur exact de sin 90 est 0.893997

Voilà j'espere que quelqu'un pourra m'aider, je ne sais pas si mon code est juste ou pas....

Merci d'avance

YoKo

mardi 14 avril 2009 à 12:49:53 | Re : DL sinus en C

YoKoM3n

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:

la valeur exact de sin 90.000000 est 0.893997

La valeur de Pi est 3.141593


YoKo

mardi 14 avril 2009 à 13:36:01 | Re : DL sinus en C

Pistol_Pete

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 :
  
[ Lien ]



Cette discussion est classée dans : double, dl, sinus, lf, fact


Répondre à ce message

Sujets en rapport avec ce message

cosinus [ par anek971 ] Bonjour ,ben avt de demander de l'aide j'ai chercher sur le forum mais ya pas le programme en c.Et en faite c juste pr une verification car mon progra Simple erreur programme c++ [ par ffnajia ] bonjour,j'ai un petit problème dans mon code, je sais pas pourquoi il me donne un message d'erreur dans la ligne en rouge???, il me dit manque de virg pb code probabilité [ par jeanphilippe37 ] bonjour, Je viens de terminer le code pour un programme de probabilité mais je ne peux pas voir les réponses s'afficher à l'écran!!!! c'est assez Passage de tableaux dynamiques (2 dimensions) en paramètres [ par Flo1987 ] Bonjourje travaille avec des matrices et j'ai un problème lorsque je veux effectuer des des opérations dessus (chaque opération est une fonction à par inverser les octets d'un type double [ par totoscill ] Bonjour,Je souhaite tourner les octets de données de type double (probleme de big endian/ little endian).Pour des données de type long ou short pas de Erreur [ par Onepenar ] Bonjour,je suis en train de faire une application  visual c++de type document/view qui permet de peindre différentes formes sur l'écran. J'ai donc du Double déréférencement [ par KurpeusLondon ] Bonjour,Je cherche a modifier une valeur  accessible seulement par deux pointeurs successifs.int A = 10;int * pA = &a;int * pB = NULL;pB = &pA;J'essay Nuage de points ...librairie stl [ par jojolero ] Bonjour a ttes et a tous!!!voila, je fais mon premier message sur ce forum qui m aide deja depuis un moment...donc grand moment pour moi...!!! :DJe re [ncurses] Double fenêtre [ par keisuke ] Hi all,J'ai un petit soucis. Je voudrais faire, une application qui aura deux fenêtres, à l'aide de ncurses.Seulement, je voudrais, avoir dans la part


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,030 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales