我认为以下代码存在精度问题:
bool isPerfectSquare(long long n){
long long squareRootN=(long long)(sqrt(n)+0.5);
return squareRootN*squareRootN == n;
}
Run Code Online (Sandbox Code Playgroud)
怎么解决? PS:1 <= n <= 10 ^ 10
Sqrt(4)可以返回1.9999 => 1,所以我加0.5,使得它在四舍五入时变为2.注意:sqrt返回浮点数.
这是我发现的解释,但仍然无法修复代码:
嗨,似乎你也是浮点值的受害者.如果可能,您应该始终避免浮点比较.随着数字范围的增加,情况变得更糟.比如,当你指定浮动a = 4.0时,它存储为4.000 ... 01111或3.999999 ... 9978或类似.因此,每当您还将一个平方根键入int时,请务必小心.这些类型的错误的可能性随着整数范围的增加而增加.
| 归档时间: |
|
| 查看次数: |
9453 次 |
| 最近记录: |