Calcule log(x)

Contenu du snippet

Ce programme permer de calculer la valeur du logarithme népérienne d'un nombre réel x.
1) précision 10^(-60) et modifiable;
2) premier boucle donne la valeur de x sous la forme x=a*(2^i), avec 0<a<2;
3) La deuxième boucle: on utilise le développement de a sous la forme de Taylor, puis en trouve la valeur de lox(x)=log(a)+i*log(2);
4) Vitesse rapide.

Source / Exemple :


// Ce programme pour calculer la valeur de log(x).
// Mohamed Amine Tag at tagtogtig@hotmail.com.
//Tu peu choizir la la valeur précise depuis epsilon, ici la précision 10^(-60)
#include <iostream>
double absolu(double x) {return (x>=0?x:-x);}//Fonction |x|.                                                            
double ln(double x) {   // ici, on suppose x > 1
double sum, term;
double epsilon=0.000000000000000000000000000000000000000000000000000000000001, v=0.693147180559945309417232121458176568075500134360255254120678;
int i,j;
     i = 0;
     sum = 1;
     term = 1;
              while(x>1) {
              x=x/2;
              i++;
              }//Boucle pour écrire x sous la forme x=a*2^i
              if(x==1) //Si x divisable sur 2.
              sum=i*v;
                   else
                   {//Si x n'est pas divisable sur 2 entrez!
                   j=1;
                   while(absolu(term)>epsilon) {
                   term=(1-x)*term;
                   sum=sum+term/(j+1);
                   j++;
                   }//Boucle permet de calculer la valeur ln(r), où 1<x<2
                   sum=(x-1)*sum+i*v;
                   }
return sum;
}
int main() {
double x;
     std::cout<<std::endl<<"Ce programme calcule le logarithme n\x82p\x82rien de x"<<std::endl;
     std::cout<<std::endl<<"Entrez la valeur positive de x : ";
     std::cin>>x;
     if(x<=0) std::cout<<std::endl<<"Erreur, il faut x positif !";
     if(x>0){
             if(x<1) 
             std::cout<<std::endl<<"La valeur de Ln("<<x<<") = "<<-ln(1/x);
             else
             std::cout<<std::endl<<"La valeur de Ln("<<x<<") = "<<ln(x);
             }
     return 0;
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.