题目
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
分析
- base:double类型,是否为0
- exponent ∈ Z
- exponent > 0
- exponent == 0 非零底数 return 1;
- exponent < 0
- 常规for循环,优化效率可以“翻番乘”,位运算等方式
- 错误处理反馈
- 方法返回值,不同值对应不同含义
- 设置错误全局变量(eg: GetLastError in Windows)
- 抛异常
MyCode
这个代码写的很是粗糙,有待修改。。。
public class Power {
public static boolean isInvallidInput = false;
public double power(double base, int exponent) {
if (exponent <= 0 && equal(base, 0.0)) {
isInvallidInput = true;
return 0.0;
}
if (exponent == 0 && !equal(base, 0.0))
return 1.0;
return exponent < 0 ? 1 / powerWithUnsignedExponent(base, Math.abs(exponent)) : powerWithUnsignedExponent(base, Math.abs(exponent));
}
public double powerWithUnsignedExponent(double base, int abs) {
double result = 1.0;
for (int i = 1; i <= abs; i++) {
result *= base;
}
return result;
}
public boolean equal(double num1, double num2) {
return (num1 - num2) > -0.0000001 && (num1 - num2) < 0.0000001 ? true : false;
}
}
总结
- 看似简单的题目要想做到精致还是需要仔细考虑的。
- 小数相等比较不能直接“==”,因为计算机计数精度的原因,一般都是两个数相差在某一个极小区间就判定相等。
- 还有很多优化的空间,值得深入考虑。