例如:以10为底,100和1000的对数分别为2,3。100和1000的几何平均值为316.23,其对数(2和3)的算术平均值为2.5.所以316.23的对数值即为2.5。这个过程可以继续下去:100和316.23的几何平均值为177.83。而177.83的对数则为(2+2.5)/2=2.25。
编写一个递归函数输出log(1),log(2),log(3)…………………..
k=2次根号下(n*m),有log k=(log n+log m)/2
编写一个递归函数输出log(1),log(2),log(3)…………………..
k=2次根号下(n*m),有log k=(log n+log m)/2
解决方案:20分
修改一下:
#include <iostream> #include <cmath> using namespace std; double defeps=1e-15; double inf = 1/defeps;//暂时用这个表示无穷大. double lg(double x); double lg(double m,double n,double vm,double vn,double x,double eps =1e-15){ double t = sqrt(m*n); double vt =(vm+vn)/2 ; if(fabs(t-x)<=eps) return vt; if(t < x) return lg(t,n,vt,vn,x,eps); return lg(m,t,vm,vt,x,eps); } double lg(double x){ if(x<=0)return -inf; if(x==1)return 0; if(x==10)return 1; if(x>10) return 1+lg(x/10); if(x<1)return -1+lg(x*10); return lg(1,10,0,1,x,defeps); } int main() { for(int i=0;i<=100;i++) cout <<lg((double)i/10)<<endl; return 0; }