我想检测一个双倍,如6.25是否是一个完美的正方形。
要检测平方根为整数的数字的完美平方,我会做类似
的操作public boolean isPerfectDouble( double i )
{
if (Double.isInfinite(i)) {
return false;
}
double sqrt = Math.sqrt(i);
return sqrt == Math.floor(sqrt) && sqrt*sqrt == i;
}
但是,对于像6.25这样的数字来说这不适用,这确实是一个完美的正方形。
答案 0 :(得分:1)
首先,您需要准确表示此类数字。可能你会想要在某些小数位后截断。然后将数字乘以https.createServer
的整数幂,直到得到一个整数。检查整数是否为正方形。
答案 1 :(得分:1)
我将解释你的断言6.25是一个完美的正方形,因为它是有理数的平方(p / q形式的数字,其中p和q都是整数)。
这与Santosh Linkhas解决方案不同 一个完美的正方形是一个整数乘以10的负幂的平方。
关键的区别在于我会认为1/9 = 0.111111...
是一个完美的正方形,因为它是1/3 = 0.33333...
平方。
这个问题的有趣部分是所有双打都是有理数,但并非所有的理性都可以表示为双打。
我建议如下:找出是否对值的平方根有一个很好的有理近似 - Algorithm for simplifying decimal to fractions是一个非常好的起点。