关于X开Y次方的算法

这篇博客探讨了如何实现一个计算 x 的 y 次方的算法,该算法与 math.h 中的 pow 函数在小数点后7位精度上相符。作者提供了两种情况的实现:当 x 和 y 均为 double 类型,以及当 y 为 int 类型。算法通过不断累加和指数递减来逐步逼近结果,直到达到一定的精度阈值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值