思路:快速幂

    1. double Power(double base, int exponent) {
    2. if(isEqual(base, 0))return 0.0;
    3. if(exponent == 0)return 1.0;
    4. if(exponent == 1)return base;
    5. double ans = 1.0;
    6. bool flag = exponent > 0;
    7. exponent = abs(exponent);
    8. while(exponent > 0){
    9. if(exponent & 1 == 1){
    10. ans *= base;
    11. }
    12. base *= base;
    13. exponent >>= 1;
    14. }
    15. return flag ? ans : 1 / ans;
    16. }
    17. //递归
    18. double Power(double base, int exponent){
    19. if(isEqual(base, 0))return 0.0;
    20. if(exponent == 0)return 1.0;
    21. if(exponent == 1)return base;
    22. bool flag = exponent > 0;
    23. exponent = abs(exponent);
    24. double result = Power(base, exponent >> 1);
    25. result *= result;
    26. if(exponent & 1 == 1)
    27. result *= base;
    28. return flag ? result : 1 / result;
    29. }

    1.判断是否为奇数:
    exponent & 1 == 1
    直接除以2奇数会丢失小数值

    2.判断base是否为0时,不能直接base==0
    在计算机内表示小数时(包括float和double)都有误差。判断两个小数是否相等,只能判断它们之差的绝对值是不是在一个很小的范围内(比如小于0.0000001 1e-7)。