发新话题
打印

关于C++的一个平方根问题

关于C++的一个平方根问题

  有个函数判定一个数n有没有平方根的

bool is_square (unsigned n){
  unsigned sqn = unsigned (sqrt(n));
  return sqn * sqn == n || (sqn + 1) * (sqn + 1) == n;
}

为什么这样子判定呢?

谢谢

TOP

  sqrt(n)得到的可能是一个近似值,可能由于计算精度原因,造成一些误差。打个比方,假设sqrt(9)得到2.9999,那经过强制类型转换unsigned (sqrt(9))之后将得到2,所以需要验证一下(sqn + 1) * (sqn + 1) == n是否满足。
以上只是猜测,至于什么时候会产生这样的误差,我不太清楚。

TOP

发新话题