繁体   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