ホームページ >バックエンド開発 >Python チュートリアル >浮動小数点計算に頼らずに、数値が完全な平方であるかどうかを判断する確実な方法はありますか?
数値が完全な平方であるかどうかを確認する方法: 詳細
はじめに
指定された数値が完全な平方であるかどうかを判断することは、一般的な数学演算です。整数の 2 乗として表現できる数値は完全平方です。平方根関数を使用した浮動小数点計算は直感的に見えるかもしれませんが、不正確になる可能性があります。整数ベースのアプローチは、より正確なソリューションを提供します。
バビロニアン アルゴリズム
整数ベースの手法の 1 つは、平方根計算用のバビロニアン アルゴリズムからインスピレーションを得ています。次の Python 関数 is_square() は、このアプローチを実装しています:
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))
これにより、指定された範囲内の各数値の直角度ステータスが出力されます。
大きな整数の処理
大きな整数の場合、このメソッドは完全に整数で動作するため、依然として実行可能です。また、浮動小数点演算の制限を回避します。たとえば、次のコードは大きな整数が完全な平方であるかどうかをチェックします。
x = 12345678987654321234567 ** 2 for i in range(x, x+2): print(i, is_square(i))
浮動小数点計算を超えて
浮動小数点計算は便利ですが、正確な直角度チェックには信頼できない場合があります。バビロニアン アルゴリズムのような整数ベースのアプローチでは、正の数値の大きさに関係なく、正確な結果が得られます。
以上が浮動小数点計算に頼らずに、数値が完全な平方であるかどうかを判断する確実な方法はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。