А вот для десятичного логарифма и к тому-же работаяющая гораздо быстрее.
Для достаточно больших x, требуеся достаточно большая длина ряда. В нижеприведенной функции
x преобразуется к виду 1<x<10, а далее вычисляется десятичный логарифм. Точность L= 10^(-6),
если нужна большая - увеличьте длину ряда m исходя из соотношения :
(9/11)^(2*m-1) < L/(100*(2*m-1))
В данном случае L=10^(-6) т.е. m=36
double log10_x (double );
double log10_x (double x){
int m= 36; // m-длина ряда, целое число
double a,b,c,d,e,f,g,i,j;
if (x==1) return 0;
a=x;
i=1;
if (x<1){
a=1/x;
i=-1;
}
j=0;
while (a>10){
a/=10;
j++;
}
if (a==10){
j++;
return i*j;
}
b=(a-1)/(a+1);
с=b*b;
d=1/b;
f=0;
e=-1;
while (m>0){
d*=c;
e+=2;
g=d/e;
f+=g;
m--;
}
f*=2;
f*=0.43429448; // для точности 10^(-6)
// округлите 1/ln(10) до 7-го знака, для 10^(-7) до 8-го и т.д..
f+=j;
f*=i;
return f;
}