C语言编写自己的对数函数
2018-01-04 17:40
337 查看
今天学长突然问了我一个很有趣的问题,应该是他在仿真中需要考虑对数函数到底进行的复杂度是多大,所以要分析求一个数的对数到底需要多少次加法及乘法。这个问题一下就吸引了我,一般在C语言中我们就#include<math.h>然后就直接用log(double x)函数来求ln(x)了,同样在Python中,一个import math,也可以直接用log函数了。但是从来没考虑过这些函数是怎么编写的,这其中自然要用到数值计算方面的技巧了,自己又不是计算机系的,当然对这些都没有涉猎,所以就只要靠无所不能的Google了。最后看了一本叫《实用数值计算方法》由清华大学出版社出版的书,里面有一章专门研究各个常用函数的C语言实现。为了自己以后方便,自己用Latex重新整理了下。
具体代码如下:
[cpp] view
plain copy
#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许久不用,基本忘完了!
参考文献:《实用数值计算方法》甄西丰编著,清华大学出版社。
转载自:http://blog.csdn.net/mike190267481/article/details/7404702
具体代码如下:
[cpp] view
plain copy
#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许久不用,基本忘完了!
参考文献:《实用数值计算方法》甄西丰编著,清华大学出版社。
转载自:http://blog.csdn.net/mike190267481/article/details/7404702
相关文章推荐
- C语言编写自己的对数函数
- 自己编写c语言实现的字符串操作函数
- 自己用C语言编写who命令
- C语言中的清屏函数(自己编写)
- 编写自己的C语言头文件
- 转:编写自己的C语言头文件
- 转载]编写自己的C语言头文件
- 【c语言】自己编写一遍折半查找
- 如何编写自己单向链表(c语言)
- 编写自己的C语言头文件
- C语言练手自己编写学生成绩管理系统
- 【C语言】自己编写程序实现strchr函数。即在给定字符串中找特定的字符并返回该处指针。
- C语言练手自己编写学生成绩管理系统
- 编程精粹--编写高质量的C语言代码(2):自己设计并使用断言(一)
- 编写自己的C语言头文件
- 编写自己的C语言头文件
- C语言,自己当年编写的苹果(黑白)棋源程序代码
- 基于Keil,自己用C语言编写动态分配函数malloc()(空间复杂度尽量低)
- 【C语言】【unix c】编写代码测试自己电脑的字节序
- 编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)