我正在浏览GSL库。我正在粘贴他们用来找到双数字的力量的函数。
double gsl_pow_int(double x, int n)
{
double value = 1.0;
if(n < 0) {
x = 1.0/x;
n = -n;
}
/* repeated squaring method
* returns 0.0^0 = 1.0, so continuous in x
*/
do {
if(n & 1) value *= x; /* for n odd */
n >>= 1;
x *= x;
} while (n);
return value;
}
但如果他们使用它们会不会更有效率?
double gsl_pow_int(double x, int n)
{
double value = 1.0;
if(n < 0) {
x = 1.0/x;
n = -n;
}
/* repeated squaring method
* returns 0.0^0 = 1.0, so continuous in x
*/
do{
if(--n)value*=x;
}while(n);
return value;
}
答案 0 :(得分:2)
你的代码甚至没有正确处理负面力量!如何宣称您的代码已经过优化。
另外,接下来,只是减少程序中的空间并不会使你的 代码更加优化。他们的代码具有更高的可读性和更多 适当的缩进比你的!他们的代码适合否定 权力也更加优化!
另外,接下来,像&
和右移>>
这样的按位逻辑运算被认为比你所做的更有效。