数值的整数次方

本文详细探讨了如何高效地计算浮点数的指数次方,并针对特殊情况进行了优化处理,包括处理0.0的负数次方和0.0的0次方等边界情况,以及使用递归方法解决正数次方问题。

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

题目描述:

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。


double pow(double base,int exp)应该考虑特殊的情况:

1)    base == 0.0   && exp < 0    没有意义,因为在求一个数的负数次方的时候,是先求出这个数的整数次方,然后求        倒数。

2) base==0.0   && exp==0  也没有意义 。


第二点:注意判断两个浮点数类型的大小,是不能直接用等号来判断的。

bool isEqual(double a,double b)//判断两个double 类型是否相等
{
    if(a-b>-1e-6&&a-b<1e-6)
    {
        return true;
    }
    else
    return false;
}


第三点:求 一个数的 n (无符号整数)次方可以用递归来实现

double unsignedpow(double base, unsigned int exp)
{  

     if(exp==0)

          return 1.0;

    if(exp==1)

         return base;

     double result=unsignedpow(base,exp>>2);//exp是一个无符号数右移时,是逻辑右移,相当于除2

     result*=result;

    if(exp&0x1)//表示exp是一个奇数

    result*=base;

    return result;

}


这下我们可以完整的写出我们的程序了

bool flags=true;
double pow(double base,int exponent)
{
    
    if(isEqual(base,0.0)&&exponent<=0)
    {
        flags=false;
        return 1.0;//表示出错。    
    }
    if(isEqual(base,1.0))
    {
        return 1.0;
    }
    
    unsigned int exp;
    if(exponent<0)//是负数,
    {
        exp=(unsigned int)(-exp);
    }
    else
    {
        exp=(unsigned int)(exp);
    }
    //exp是一个正数;
    //
    double result=unsignedpow(base,exp);
    if(exponent<0)
    result=1.0/result;
    return result;    
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值