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元

相关文章推荐

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

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

如何实现对数ln运算?

好朋友Z说他们期末得设计一个计算器,对数ln的运算挺麻烦的。 我想,这不是就是泰勒展开的事吗? 泰勒展开1.0 立刻想到了这个嘛: 然而,跑一下程序的结果是这样的: 1.1 ...

c语言里面log函数怎么用

2、函数名: log10 功 能: 对数函数log,以10为底 用 法: double log10(double x); 程序示例: #include #include int main(voi...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

高精度对数函数的实现二

针对泰勒展开式:ln(1+x)=x-x^2/2+x^3/3-……+(-1)^(k-1)*(x^k)/k(|x| 转换成:ln(1+x)=x(1-x(1/2-x(1/3-x(1/4-x(1/5........

LOG2函数实现

log2 function,from lua source code! //log2 function ;C & c++ codeint luaO_log2 (unsigned int x) {  s...

log2 ( ) 【C语言库函数源代码】

 【C语言库函数源代码】【本程序在Dev C++ 4.9.9.2 下编译通过】double my_log2(double x){   register double ret;   __asm__(  ...

C语言中log函数怎么使用啊

#include #include math.h> void main() { double i = 2, j =4; printf("log2,4 = %f\n",log(j)/log(i));...

ln lg,log在c语言中的表示

在MFC中将采集上来的10bit图像数据转换为8bit图像数据中,用到ln函数(e为底)。查了查ln,lg,和log在c中的应用:         惊奇的发现:c语言中定义的函数和数学上定义的函数有...

C/C++log日志库比较

事实上,在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx)。C程序员都喜欢用自己的轮子。printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者...
  • gatieme
  • gatieme
  • 2016年01月28日 23:21
  • 13876
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言编写自己的对数函数
举报原因:
原因补充:

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