ホームページ > バックエンド開発 > Python チュートリアル > 浮動小数点計算に頼らずに、数値が完全な平方であるかどうかを判断する確実な方法はありますか?

浮動小数点計算に頼らずに、数値が完全な平方であるかどうかを判断する確実な方法はありますか?

Linda Hamilton
リリース: 2024-11-09 01:47:02
オリジナル
679 人が閲覧しました

Is there a foolproof way to determine if a number is a perfect square without relying on floating-point computations?

数値が完全な平方であるかどうかを確認する方法: 詳細

はじめに

指定された数値が完全な平方であるかどうかを判断することは、一般的な数学演算です。整数の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート