数値が完全平方であるかどうかを判断するのは簡単そうに見えますが、浮動小数点演算に依存するのは信頼性が低い場合があります。精度を高めるには、以下に示すような整数ベースのアプローチを採用することが重要です。
このアルゴリズムは、バビロニア方式の平方根計算を利用します。現在の推定値の平均と、その推定値で割った数値を計算することで平方根を繰り返し推定します。
def is_square(apositiveint): x = apositiveint // 2 seen = set([x]) while x * x != apositiveint: x = (x + (apositiveint // x)) // 2 if x in seen: return False seen.add(x) return True
このメソッドは、任意の正の整数に対して収束することが証明されており、数値が完全でない場合は停止します。
例を示します:
for i in range(110, 130): print i, is_square(i)
出力:
110 False 111 False 112 False 113 False 114 False 115 False 116 False 117 False 118 False 119 False 120 True 121 True 122 False 123 False 124 False 125 True 126 False 127 False 128 False 129 True
上記のように、アルゴリズムは完全二乗を正しく識別します。
大きな整数の場合、浮動小数点の不正確さが著しくなり、誤った結果が生じる可能性があります。精度を確保するために、このタスクでは浮動小数点演算を使用しないことをお勧めします。
以上が数値が完全な平方であるかどうかを正確に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。