如何编写指数函数 而不使用math.h

来源:百度知道 编辑:UC知道 时间:2024/05/23 11:24:23
我们老师布置给我们一个作业是让我们编写指数函数方程, 就是power fuction , pow(a, b) ,但是不使用math.h。我脑袋里完全没有思路 希望大家帮助我一下 谢谢
我已经写出来了 pow(a, b) without math.h
int pow(int b,int p)
{ int i,sum;
if(p<0)
return 0;
else
{
for(i=1;i<=p;i++)
{ if(i==1)sum=b;
else
sum*=b;
}
return sum;
}
}
但是还有个问题
题目要求 print出来的 是从 b的 一次方开始
一直print到b的 p次方 该如何写main fuction啊

最基本的方法:把b分成整数部分和小数部分。整数部分从右往左数的第N位(二进制,N从0开始算)对应了a的2 ^ N次方;小数部分从左往右数的的第N位对应了a的2 ^ -(N + 1)次方。

结果初始值为0,如果某一位是1,则结果乘上其所对应a的X次方;否则不乘。

比如b的二进制表示是101.01 结果就是 a ^ 4 * a ^ 1 * a ^ (1/4)

----

不过开方还是问题,这样貌似不行+_,+b

----

wangtk1982 的方法玩儿过火了...

硬要弄的话我那个方法配上开方就可以了。远比那样绕弯子效率高。而开方最好用牛顿迭代算出倒数,这样可以避免大量不必要的除法。不过这样应该不是合理的实现。VC实现乘方貌似根本没用开方。

#include <stdio.h>
const int N=100;

double coef(int n)
{
if(n==0) return 0;
double t=1.0/n;
if(n%2==0) t=-t;
return t;
}//x^n的系数
double horner(double x)
{
double u=coef(N);
for(int i=N-1;i>=0;i--)
u=u*x+coef(i);
return u;
}
double sqrt(double b)
{
double x=1;int step=0;
while((x*x-b<-0.000000000000001||x*x-b>0.000000000000001)&&step<50)
{x=(b/x+x)/2.0;step++;}
return x;
}//开平方

double ln(double x)//ln(1+x)=x-x^2/2+x^3/