この質問は、こちらの投稿のフォローアップです:整数の平方根が整数であるかどうかを判断する最速の方法、入力が完全な正方形であるかどうかを判断するための優れたアルゴリズムは何ですか? .
そこの投稿の1つに、特定の数値がaperfect square
かどうかを確認するための次の解決策がありました。
public final static boolean isPerfectSquare(long n)
{
if (n < 0)
return false;
switch((int)(n & 0xF))
{
case 0: case 1: case 4: case 9:
long tst = (long)Math.sqrt(n);
return tst*tst == n;
default:
return false;
}
}
これはきちんとした解決策であり、完全にうまく機能します。しかし、それがどのように機能するか、さらに重要なことに、このソリューションがどのように導出されるかについての説明は詳細に説明されていません. このソリューションがどのように導き出されているかを知りたいです。