我正在實現一個簡單的二分查找來查找整數的平方根。代碼正確運行。但是,如果我將if
中的條件從mid * mid > x
更改爲mid > (x/mid)
,則似乎超時了大輸入,則一切正常。整數乘法和除法之間意外的性能差異
int sqrt(int x) {
if(x < 0) return -1;
if(x <= 1) return x;
int l,r,mid,ans;
l = 0;
r = x;
while(l <=r){
mid = (l + r)/2;
if((mid * mid) == x) return mid;
if((mid * mid) > x){ //<===== here if I change to mid > (x/mid)
r = mid - 1;
}else{
l = mid + 1;
ans = mid;
}
}
return ans;
}
};
因此我得出結論,劃分比乘法更快。但是迄今爲止我所做的研究都指向乘法比分裂更快。
的[I應該使用乘法或除法?]可能重複(http://stackoverflow.com/questions/226465/should-i-use-multiplication-or-division) – sashoalm
我具有重複不同意,因爲這是更加關於浮點算術,而這種情況是整數算術。我也編輯過這個標題。 OP,如果您不同意,請回滾。 – Bathsheba
你在不到一分鐘內就投了票,你真的看過我的問題嗎? – Leo