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



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

具体代码如下:

#include<stdio.h>


double MYLOG(double a)
{
   int N = 15;//我们取了前15+1项来估算
   int k,nk;
   double x,xx,y;
   x = (a-1)/(a+1);
   xx = x*x;
   nk = 2*N+1;
   y = 1.0/nk;
   for(k=N;k>0;k--)
   {
     nk = nk - 2;
     y = 1.0/nk+xx*y;
     
   }
   return 2.0*x*y;
   
}

int main()
{
    double b ;
    b = MYLOG(2);
    
    printf("%.10f",b);
    getch();
    return 0;
}

最后我们看看结果:


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

 

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






  • 18
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值