关于X开Y次方的算法

 刚刚看别人的博客,讨论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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值