posts - 297,  comments - 15,  trackbacks - 0
来自百度知道的湛蓝水晶,源代码如下:
//////////////////////////////////////////////////////////////////////
// 用自己写的函数实现c++的pow()的功能 //
// 制作 初学者蒲骏逸 //
// 水平有限,错漏在所难免,欢迎交流,如有任何意见, //
// 请email到:pjy.studio@gmail.com Thank you! //
//////////////////////////////////////////////////////////////////////
#include<iostream>
#include<cmath>
using namespace std;
double pow_i(double num,int n);//计算num的n次幂,其中n为整数
double pow_f(double num,double m);//计算num的m次幂,num和m可为双精度,num大于零小于2
double pow_ff(double num,double m);//调用pow_f()和pow_i(),计算num的m次幂,是计算幂的入口
;
int main()
{
double num,m;
cout<<"输入底数num和指数m:"<<endl;
cin>>num>>m;
cout<<"c++ 's answer:"<<pow(num,m)<<endl;
cout<<"my answer:"<<pow_ff(num,m)<<endl;
}

double pow_i(double num,int n)//计算num的n次幂,其中n为整数
{
double powint=1;
int i;
for(i=1;i<=n;i++) powint*=num;
return powint;
}
double pow_f(double num,double m)//计算num的m次幂,num和m可为双精度,num大于零
{
int i,j;
double powf=0,x,tmpm=1;
x=num-1;
for(i=1;tmpm>1e-12 || tmpm<-1e-12;i++)//当tmpm不在次范围时,停止循环,范围可改
{
for(j=1,tmpm=1;j<=i;j++)
tmpm*=(m-j+1)*x/j;
powf+=tmpm;
}
return powf+1;
}
double pow_ff(double num,double m)//调用pow_f()和pow_i(),计算num的m次幂,是计算幂的入口
{
if(num==0 && m!=0) return 0;//若num为0,则返回0
else if(num==0 && m==0) return 1;// 若num和m都为0,则返回1
else if(num<0 && m-int(m)!=0) return 0;//若num为负,且m不为整数数,则出错,返回0
if(num>2)//把底数大于2的情况转为(1/num)^-m计算
{
num=1/num;
m=-m;
}
if(m<0) return 1/pow_ff(num,-m);//把指数小于0的情况转为1/num^-m计算
if(m-int(m)==0) return pow_i(num,m);/*当指数为浮点数是,分成整数和小数分别求
幂,这是因为但底数较小式,用pow_f直接求幂
误差大,所以分为指数的整数部分用pow_i,小
数部分用pow_f求.*/
else return pow_f(num,m-int(m))*pow_i(num,int(m));
return pow_f(num,m);
}
posted on 2009-03-07 21:01 chatler 阅读(1258) 评论(0)  编辑 收藏 引用 所属分类: Algorithm

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2010年1月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(10)

随笔分类(307)

随笔档案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感觉这个博客还是不错,虽然做的东西和我不大相关,觉得看看还是有好处的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新评论

阅读排行榜

评论排行榜