关于X开Y次方的算法

来源:互联网 发布:java decompiler 破解 编辑:程序博客网 时间:2024/04/28 20:03

 刚刚看别人的博客,讨论x的y次方问题,自己小试了一下,和math.h的pow(x,y)相差在小数点后7位,大家可以一试别的好的方法。

double CMathtestDlg::nuaa_pow(double x,double y)
{
//*****************************************//
//x必须>0
//*******************************************
 int i;
 double yy,z;
 if(x>0)
   x=nuaa_log(x);
 else
  return 0;
 yy=1;
 z=1;
 i=1;
 do
 {
  z=z*x*y/i;
  yy=yy+z;
  i=i+1;
 } while(z>1e-6||-1e-6>z);
 return yy;
}

 

 

 

还在想x如果其他值呢?可以这样一试:

 

double CMathtestDlg::nuaa_pow(double x,int y)
{
 int i,sign=1;
 double yy,z;
 if(x>0)
   x=nuaa_log(x);
 else if(x<0)
 {
  x=nuaa_log(-x);
  if((y&1)==0)//判断y是奇数还是偶数
   sign=1;
  else
   sign=-1;
 }
 else
  return 0;
 yy=1;
 z=1;
 i=1;
 do
 {
  z=z*x*y/i;
  yy=yy+z;
  i=i+1;
 } while(z>1e-6||-1e-6>z);
 return yy*sign;