Section courante

A propos

Section administrative du site

Après avoir effectué des recherches dans de nombreux livres comme Scientific Pascal, Dictionnaire mathématique,..., je n'ai jamais trouvé aucun livre fournissant une réponse correct du calcul du logarithme, outre le projet GNU (HaypoCALC). Bien qu'il existe de nombreuses fonctions de logarithme du langage Turbo Pascal, il peut être intéressant d'effectuer les calculs par nous même :

Essayer maintenant !
  1. Program LogSamples;
  2.  
  3. Function SquareRoot(X:Real):Real;
  4. Var
  5.  A,B,M,XN:Real;
  6. Begin
  7.  If X=0.0Then Begin
  8.   SquareRoot:=0.0;
  9.  End
  10.   Else
  11.  Begin
  12.   M:=1.0;
  13.   XN:=X;
  14.   While XN>=2.0 do Begin
  15.    XN:=0.25*XN;
  16.    M:=2.0*M;
  17.   End;
  18.   While XN<0.5 do Begin
  19.    XN:=4.0*XN;
  20.    M:=0.5*M;
  21.   End;
  22.   A:=XN;
  23.   B:=1.0-XN;
  24.   Repeat
  25.    A:=A*(1.0+0.5*B);
  26.    B:=0.25*(3.0+B)*B*B;
  27.   Until B<1.0E-15;
  28.   SquareRoot:=A*M;
  29.  End;
  30. End;
  31.  
  32.  
  33. Function LogNip(x:Real):Real;
  34. Var
  35.  negatif:Boolean;
  36.  fois,i:Integer;
  37.  ajout,savx,xp,quotient,dl:Real;
  38. Begin
  39.  negatif := False;
  40.  fois := 1;
  41.  ajout := 0;
  42.  If x <= 0.0 Then Begin
  43.   LogNip:=0;
  44.   Exit;
  45.  End;
  46.  If x < 1.0 Then Begin
  47.   negatif := True;
  48.   x := 1.0 / x;
  49.  End;
  50.  While x >= 10.0 do Begin
  51.   x := x / 10.0;
  52.   ajout := ajout + 2.302585092994046;
  53.  End;
  54.  While x >= 1.1 do Begin
  55.   x := SquareRoot(x);
  56.   fois := fois * 2;
  57.  End;
  58.  x := x - 1;
  59.  savx := x;
  60.  i := 2;
  61.  xp := x * x;
  62.  quotient := (xp / i);
  63.  dl := x - quotient;
  64.  While 1.0E-15 < quotient do Begin
  65.   i := i + 1;
  66.   xp := xp * x;
  67.   dl := dl + (xp / i);
  68.   i := i + 1;
  69.   xp := xp * x;
  70.   quotient := (xp / i);
  71.   dl := dl - quotient;
  72.  End;
  73.  dl := dl * fois;
  74.  dl := dl + ajout;
  75.  If(negatif)Then dl := - dl;
  76.  LogNip:=dl;
  77. End;
  78.  
  79. Var
  80.  I:Real;
  81.  
  82. BEGIN
  83.  I:=0;
  84.  While I <= 2.0 do Begin
  85.   WriteLn('Ln(',I:1:1,')=',LogNip(I):1:10);
  86.   I := I + 0.1;
  87.  End;
  88. END.

on obtiendra le résultat suivant :

Ln(0.0)=0.0000000000
Ln(0.1)=-2.3025850930
Ln(0.2)=-1.6094379125
Ln(0.3)=-1.2039728043
Ln(0.4)=-0.9162907318
Ln(0.5)=-0.6931471806
Ln(0.6)=-0.5108256238
Ln(0.7)=-0.3566749440
Ln(0.8)=-0.2231435513
Ln(0.9)=-0.1053605157
Ln(1.0)=0.0000000000
Ln(1.1)=0.0953101798
Ln(1.2)=0.1823215568
Ln(1.3)=0.2623642645
Ln(1.4)=0.3364722366
Ln(1.5)=0.4054651081
Ln(1.6)=0.4700036292
Ln(1.7)=0.5306282511
Ln(1.8)=0.5877866649
Ln(1.9)=0.6418538862

Voir également

Science - Mathématique

Dernière mise à jour : Dimanche, le 17 janvier 2016