gpt4 book ai didi

java - 完美的Java代码来确定Double是否是完全平方?

转载 作者:行者123 更新时间:2023-12-01 13:18:17 24 4
gpt4 key购买 nike

我想确定一个数字( double )是否是完全平方数。我使用了下面的代码,但对于许多输入来说它失败了。

private static boolean isSquare(double i) {
double s = Math.sqrt(i);
return ((s*s) == i);
}

s 结果为科学形式时,代码失败。例如,当 s2.719601835756618E9

最佳答案

您的代码不会尝试测试数字的平方根是否是整数。任何非负实数都是其他实数的平方;您的代码的结果完全取决于浮点舍入行为。

测试平方根是否为整数:

if (Double.isInfinite(i)) {
return false;
}
sqrt = Math.sqrt(i);
return sqrt == Math.floor(sqrt) && sqrt*sqrt == i;

sqrt*sqrt == i 检查应该捕获某些情况,其中非常接近平方的数字具有其最接近的 double 近似值是整数的平方根。我没有对此进行测试,也不保证其正确性;如果您希望您的软件健壮,请不要只是从答案中复制代码。

更新:发现失败的边缘情况。如果整数 double 的最大奇数因子足够长,以至于无法表示平方,则将平方的最接近的 double 近似值输入此代码将导致误报。目前我能想到的最佳解决方法是直接检查平方根的有效数,以确定表示平方需要多少位精度。谁知道我还错过了什么?

关于java - 完美的Java代码来确定Double是否是完全平方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22280066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com