C语言编写自己的对数函数

今天学长突然问了我一个很有趣的问题,应该是他在仿真中需要考虑对数函数到底进行的复杂度是多大,所以要分析求一个数的对数到底需要多少次加法及乘法。这个问题一下就吸引了我,一般在C语言中我们就#include<math.h>然后就直接用log(double x)函数来求ln(x)了,同样在Python中,一个import math,也可以直接用log函数了。但是从来没考虑过这些函数是怎么编写的,这其中自然要用到数值计算方面的技巧了,自己又不是计算机系的,当然对这些都没有涉猎,所以就只要靠无所不能的Google了。最后看了一本叫《实用数值计算方法》由清华大学出版社出版的书,里面有一章专门研究各个常用函数的C语言实现。为了自己以后方便,自己用Latex重新整理了下。

C语言编写自己的对数函数

C语言编写自己的对数函数

具体代码如下:

[cpp] view plain copy
  1. #include<stdio.h>  
  2.   
  3.   
  4. double MYLOG(double a)  
  5. {  
  6.    int N = 15;//我们取了前15+1项来估算  
  7.    int k,nk;  
  8.    double x,xx,y;  
  9.    x = (a-1)/(a+1);  
  10.    xx = x*x;  
  11.    nk = 2*N+1;  
  12.    y = 1.0/nk;  
  13.    for(k=N;k>0;k--)  
  14.    {  
  15.      nk = nk - 2;  
  16.      y = 1.0/nk+xx*y;  
  17.        
  18.    }  
  19.    return 2.0*x*y;  
  20.      
  21. }  
  22.   
  23. int main()  
  24. {  
  25.     double b ;  
  26.     b = MYLOG(2);  
  27.       
  28.     printf("%.10f",b);  
  29.     getch();  
  30.     return 0;  
  31. }  

最后我们看看结果:

C语言编写自己的对数函数

后记:在广大计算机专业同学面前献丑了,自己纯粹是对于这个问题的好奇才去看了下,当然对sqrt()函数貌似原来知道用牛顿迭代来数值计算,这些都是兴趣使然,自己也不是太懂。另外,Latex许久不用,基本忘完了!

 

参考文献:《实用数值计算方法》甄西丰编著,清华大学出版社。


转载自:http://blog.****.net/mike190267481/article/details/7404702