我们看到这个题目时候,第一时间就会写出如下的代码:
double Power(double base, int exponent)
{
int i = 0;
double result = 1.0;
for (i = 1; i <= exponent; i++)
{
result *= base;
}
return result;
}
不过很遗憾,这样的写法虽然也对,但是代码完整吗?
当base=0、exponent<1时,0的负数次方无意义、0的0次方在数学上是无意义的,但是必须考虑到这个边界值。
当指数为负数,也没有考虑。
0的正数次方是0,是有意义的,所以不能和无意义返回0混淆,我们创建需要全局变量。
考虑所有情况,对上代码进行修改:
#define EXP 0.000000000000001
bool judge = false;
double Power(double base,int exponent)
{
double result = 1.0;
int i = 0;
int exponent1;
if ((base < EXP&&base>-EXP) && exponent <= 0)//0的负数和0的0次方无意义
{
judge = true;
return 0;
}
if (exponent < 0)
exponent1 = -exponent;
else
exponent1 = exponent;
for (i = 1; i <= exponent1; i++)
{
result *= base;
}
if (exponent < 0)
result = 1.0 / result;
return result;
}