我正在用 Java 实现一个 pow 函数,我想知道我们如何处理 Integer.MIN_VALUE 作为指数?我们只是把它当作一个特例吗?
因为我试图将结果与标准 Java.lang.Math API 进行比较,我得到了几个不同的结果。以下是对比清单
//this will print "1.0 vs 0.0"
System.out.println(pow(2,Integer.MIN_VALUE) + " vs " + Math.pow(2,Integer.MIN_VALUE));
//this will print "1.0 vs 1.0"
System.out.println(pow(1,Integer.MIN_VALUE) + " vs " + Math.pow(1,Integer.MIN_VALUE));
public double pow(double base, int exp){
double result = 1.0;
boolean pos = false;
if(exp == 0) return result;
if(exp > 0){
pos = true;
exp *= -1;
}
while(exp > 0){
if((exp & 1) == 1){
result *= base;
}
base *= base;
exp /= 2;
}
if(!pos){
result = 1/result;
}
return result;
}
所以我想知道 Integer.MIN_VALUE 是否是一种特殊情况,我必须有一个 if 语句来检查它。
if(exp == Integer.MIN_VALUE && base > 1) return 0.0;