牛客网《剑指Offer》 编程 12.数值的整数次方

本文探讨了如何正确实现浮点数的幂运算,并特别关注了处理边界情况的方法,如底数为0、指数为0或负数的情况。此外,还讨论了浮点数比较时的精度问题。

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

题目描述

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

解题思路

一般情况下都能够想到的代码是

double normalPower(double base,int exponent){
        double result=1.0;
        for(int i=1;i<=exponent;i++){
            result*=base;
        }
        return result;
    }

但是考虑边界情况是:

1. 底数为0;

2.指数为0;

3.指数为负数。

考虑了这三种情况,思路就完整了。

另外关于浮点数的比较问题:double和float不能够直接==进行比较,因为计算机舍取的精度问题。因此可以用这种方式:

doubel a 和double b,(a-b)>-EPSILON&&(a-b)<EPSOLON,查看相减的值是不是在某一个范围内。

代码实现

double Power(double base, int exponent) {
        //现在要考虑的特殊情况,即base为0时怎么处理;
        //特殊情况:exponent为0时怎么处理。
        double result=1.0;
        if(equal(base,0.0)){return 0.0;}
        else if(exponent==0){return 1.0;}
        else if(exponent>0){//exponent为正数
            result=normalPower(base,exponent);
            return result;
        }else{//exponent为负数
            exponent=-exponent;
            result=normalPower(base,exponent);
            result=1/result;
            return result;
        }
    }
    double normalPower(double base,int exponent){
        double result=1.0;
        for(int i=1;i<=exponent;i++){
            result*=base;
        }
        return result;
    }
    bool equal(double a,double b){
        if((a-b>-1e-5)&&(a-b<=1e-5)){
            return true;
        }else{
            return false;
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值