Qui peut m'aider???!

cs_gnawy Messages postés 2 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 22 avril 2007 - 22 avril 2007 à 11:17
Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007 - 24 avril 2007 à 18:14
bonjours a vous!
voila je voudrais ecrire un programme qui me permet de calculer la fonction( exponentielle x ) on utilisant les fonctions puissance et factorielle,mais qui s'arrete des que xi/i!<epsilone.         0<epsilone<1.
merci de m'aider!

2 réponses

Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007
22 avril 2007 à 21:47
Tu veut utiliser les series de Taylor je suppose.

Si tu veut réinventer la roue (mais en plus "carrée"):

#define ITER 500 // plus il est grand, plus la précision est bonne et moins rapide il est.
double fct(int x)    // Factorielle

{

  if(!x)

  return 1;    // Si x = 0, renvoi 1

  double buffer = 1.0;

  for(int i = 1; i<= x; i++)

    buffer *= i;

  return buffer;

}

double pow(double x, int power)  // Puissance

{

  if(!power)

  return 1;

  double buffer = 1.0;

  for(int i = 0; i < power; i++)

    buffer *= x;

  return buffer;

}

double exp(double x)    // Exponetielle
{

  double buffer = 1.0;

  for(int i = 1; i < ITER; i++)

    buffer += (pow(x, i) / fct(i));

  return buffer;

}

sinon, utilise math.h (beaucoup pluys rapide car utilise la FPU directement.

 

                
0
Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007
24 avril 2007 à 18:14
Code qui marche un peut mieu (a cause des commandé "builtin") :

double _fct(int x) // Factorielle
{
    int i;
    double buffer = 1.0;

    if(!x)  return 1;

    for(i = 1; i<= x; i++) buffer *= i;
    return buffer;
}

double _pow(double x, int power) // Puissance
{
    int i;
    double buffer = 1.0;

    if(!power)  return 1;

    for(i = 0; i < power; i++)  buffer *= x;
    return buffer;
}

double _exp(double x)
{
  int i;
  double buffer = 1.0;

  for(i = 1; i < 50; i++) buffer += (_pow(x, i) / _fct(i));
  return buffer;
}

int main(void)
{
    printf("exp(1) = %f\n", _exp(1));
    return 0;
}
0
Rejoignez-nous