我有一个非常有趣的问题。最近我发现,Math.pow()只接受(double,double)args,我想知道为什么没有其他类型组合的重载函数,如(int,int)或(int,double)atc ... < / p>
我认为这是一个很大的漏洞和缺陷,所以我相信有一个原因。有人可以向我解释一下吗?
考虑以下两种方法:
private int simplePow(int x) {
return x * x;
}
private int harderPow(int x) {
return (int) Math.pow(x, 2);
}
第一个比第二个快得多...问题是,如果你知道,你使用幂(int,int),计算是非常有效的,你不需要处理双变量的问题。
答案 0 :(得分:7)
你应该关注的唯一问题是(int, int)
超载;采用double
参数的其他人应该导致double
s,因此(double, double)
方法会这样做。那么为什么没有(int, int)
重载?可能是因为取幂增长得如此之快,并且因为int
s只有32位长,所以有一些参数的数量有限,因此一个参数可以在另一个范围内。 double
有多更大的范围,因此他们没有类似的问题(要清楚,双打也会溢出,但他们可以保持最大值约为1.8e308 ;远大于int)。您当然可以实现自己的方法来获取整数幂,就像here一样(接受的答案使用exponentiation by squaring,也可以应用于(double, int)
情况)。< / p>
答案 1 :(得分:-1)
我对Java知之甚少,但是对于C ++,你主要关心的是动态内存管理以及启动和关闭时的重载...我可以说,如果算法的方法会减慢,那么在优化方面系统的进展,然后你指的是asymetrics ...但是,我担心的是你在质疑超载是对的,但是如果在你的程序中有其他形式的问相同的问题没有最好的用途(最佳实践)教导这是写入结果以防止错误的方法......