Methodes

Résolu
ss10 Messages postés 8 Statut Membre -  
jisisv Messages postés 3678 Statut Modérateur -
bonsoir,

voici l'enoncé de mon probleme
je veux testez la methode d'implémentation de la fonction puissance :
static double pow(double x,int n)
cette methode renvois la valeur de x elevé a la puissance n.(n est entier positif ou négatif ou nul)

ya t'il qulqu'un qui peut m'aider
merci

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    avec quel langage ?
    0
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    Utilise la méthode de Horner.
    En C par exmple:
    johand@osiris: ~/src/CCM/C $ cat powint.c 
    #include <stdlib.h> 
    #include <stdio.h> 
    
    float powi(float base, int pow) 
    { 
      float res = 1.0; 
      float facteur = base; 
      if (pow < 0) 
        { 
          facteur = 1.0 / base; 
          pow = -pow; 
        } 
      while(pow) 
        { 
          if(pow & 1) 
     { 
       res = res * facteur; 
     } 
          facteur = facteur * facteur; 
          pow = pow >> 1; 
        } 
      return res; 
    } 
    
    int  main(int argc, char *argv[]) 
    { 
      float f; 
      int p; 
      if(argc >=3) 
        { 
          f = atof(argv[1]); 
          p = atoi(argv[2]); 
          printf("%f to the power %d is %f\n", f, p , powi(f, p)); 
          return EXIT_SUCCESS; 
        } 
      else 
        { 
          fprintf(stderr, "Usage is %s base power\n", argv[0]); 
          return EXIT_FAILURE; 
        } 
    } 
    
        
    johand@osiris: ~/src/CCM/C $ gcc -Wall -o powint powint.c 
    johand@osiris: ~/src/CCM/C $ ./powint 5 -3 
    5.000000 to the power -3 is 0.008000 
    johand@osiris: ~/src/CCM/C $ ./powint 0.3 4 
    0.300000 to the power 4 is 0.008100


    Ceci permet de réduire la complexité d'un ordre O(n²) à un ordre O(n). n étant l'argument exposant de la fonction.
    Je n'ai pas traité toutes les conditions d'erreur de atoi et atof.
    Gates gave ^H sold you the windows.
    GNU gave us the whole house.(Alexandrin)
    0