[英]Program for finding square root of number
所以我寫了一個程序來找到一個數字的平方。 對於較小的數字,它似乎工作正常,但對於長數字,它會產生奇怪的結果。 這是我的代碼。
int SquareRoot(long x)
{
long start=1;
long end=x;
long mid;
while(start<end)
{
mid=start+(end-start+1)/2;
if(mid*mid<x)
{
if((mid+1)*(mid+1)>x)
{
return mid;
}
start=mid;
}
else if(mid*mid>x)
{
if((mid-1)*(mid-1<x)
return mid-1;
end=mid;
}
else
return mid;
}
return start;
}
當計算mid * mid
和(mid + 1) * (mid + 1)
一個或兩個溢出時,您觀察到的“奇怪結果”可能會發生,當end
大於2*sqrt(LONG_MAX)
(大約 6,074,000,998 2*sqrt(LONG_MAX)
時會發生這種情況如果long
是 64 位,或者 92680 如果long
是 32 位)。
溢出將導致與x
的比較產生錯誤的結果(從技術上講,溢出會產生未定義的行為,盡管使用 gcc 結果是可預測的但不正確)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.