簡體   English   中英

求數平方根的程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM