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

原创 2012年03月28日 21:58:50

注:更新于2015/08/02,增加了博文打赏,见文章结束后的二维码。如果您觉得此博文帮助了您,愿意打赏,请您阅读博文一个艰难的决定 ,了解为何添加博文打赏。   


今天学长突然问了我一个很有趣的问题,应该是他在仿真中需要考虑对数函数到底进行的复杂度是多大,所以要分析求一个数的对数到底需要多少次加法及乘法。这个问题一下就吸引了我,一般在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许久不用,基本忘完了!

 

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



支付宝打赏任意金额


微信打赏5元

LOG2函数实现

log2 function,from lua source code! //log2 function ;C & c++ codeint luaO_log2 (unsigned int x) {  s...
  • EmoSpring
  • EmoSpring
  • 2009年06月26日 09:33
  • 1239

计算以2为底的log

在学习 大数n!算法时, 想到log2(x)怎么算? math.h中没有log2接口, 只有log和log10. 上网查了下, 原来用对数换底公式可以搞定这事^_^ // @file power_ex...
  • LostSpeed
  • LostSpeed
  • 2016年01月03日 14:05
  • 1842

c语言里面log函数怎么用

2、函数名: log10 功 能: 对数函数log,以10为底 用 法: double log10(double x); 程序示例: #include #include int main(voi...
  • qaz135135135
  • qaz135135135
  • 2016年11月29日 19:51
  • 4448

Log边缘检测算法

根据卷积的求导法则,先卷积后求导和先求导后卷积是相等的,所以可以把第1、2步合并为一步,先对高斯滤波器做拉普拉斯变换,得到墨西哥草帽算子,然后再用这个算子与图像做卷积。 edge函数实现的语法格式如...
  • baidu_21578557
  • baidu_21578557
  • 2016年07月02日 14:51
  • 4709

log函数快速计算c语言程序

  • 2010年07月26日 15:16
  • 361KB
  • 下载

C语言的数学计算库

C语言提供了一组支持数学运算的丰富的函数,包括三角函数、双曲函数、指数和对数函数、幂函数、就近取整函数、绝对值函数和取余函数。这些函数的原型都定义在头文件中。使用它们,需要用#include指令包含这...
  • lemonrabbit1987
  • lemonrabbit1987
  • 2015年08月28日 07:16
  • 1863

C语言中 ln(以自然对数e为底) lg(以十为底) 以及logab(以a为底,b为真数)的相关知识

总所周知,我们在高中学过对数函数,记作y=logax。下面是百度百科关于对数函数的描述: 对数的定义:一般地,如果ax=N(a>0,且a≠1),那么数x叫做以a为底N的对数,记作x=logaN,读...
  • liujian20150808
  • liujian20150808
  • 2016年02月03日 10:31
  • 4638

C语言对数函数log

log10   函数名: log10   功 能: 对数函数log   用 法: double log10(double x);   程序例:  ...
  • caryliu
  • caryliu
  • 2012年10月23日 10:14
  • 1791

C语言快速取以2为底的对数的方法

C语言快速取以2为底的对数的方法int FastLog2(int x) { float fx; unsigned long ix, exp; fx = (float)x; ...
  • ce123
  • ce123
  • 2013年11月26日 11:20
  • 3604

高精度对数函数的实现

针对高精对数,我目前已采用了比较容易编程和高效的方法。就是开方分解Ln(x)中的X(早先调试开方程序时就发现,大于零的数进行开方运算,当开方次数无限增加时,开方值无限接近1)...
  • qq_34030789
  • qq_34030789
  • 2016年05月22日 18:39
  • 573
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言编写自己的对数函数
举报原因:
原因补充:

(最多只允许输入30个字)