1.如何用C语言编写一个对数运算
用库函数math.h 这里面的log就是数学里面ln(底数为e的那个家伙)的意思。如下代码例子
#include<stdio.h>
#include<math.h>
main()
{
double k;
k=log(2.71828);
printf(" %f ",k);
k=log(8)/log(2);
printf(" %f ",k);
}
第一k是ln(e)的意思,e约为2.71828,屏幕上打印出值为0.999999,
第二k是求底数为2真数为8的值log2(8)=ln(8) /ln(2) (这个数学转化式我不用多说),打印出来的结果是3.000000
2.求log()的实现方法
3个建议:1、如果坚持使用该方法,一种加快收敛的方法是让t接近1再求ln(t)。
这里仅考虑t > 1的情况,如果t < 1,则ln(t) = -ln(1/t)。设e^x = t, 先求x的整数部分n,再求小数部分y。
只要不断累乘e,直到刚好超过t,累乘的次数就是n+1。再用你说的泰勒展开求y,因为0 <= y < 1,所以收敛速度可以较快。
2、实际上,当y接近1时,收敛速度还是不快,因为ln2 = 1 - 1/2 + 1/3 - 1/4 + 。
建议求解方程e^x = t。用牛顿法,迭代公式是x1 = x0 - 1 + t/e^x0。
其中e^x0可以用泰勒展开近似,结合1中的建议,无需展开多项。我试了一下,效果不错。
3、上面的方法都很麻烦,直接做积分最简单了。1/x在1到t上的积分就是ln(t)。
有无数的方法可以做,效果最好了。
转载请注明出处育才学习网 » 单片机里怎么实现log运算的代码怎么写