Select Language

AI Technology Community

2.14、Python平方根を求める(ソースコード付き)

浮動小数点数の平方根を求めるには、math.sqrt() などのライブラリ関数を使用することができます。ただ、このセクションでは浮動小数点数のいくつかの使い方をデモンストレーションするために、以下の反復法を使ってある数の平方根を求めます。

その基本原理は次の通りです。浮動小数点数 a の平方根は必ず 1 と a の間にあります。

  • 例えば a = 2 の場合、その平方根 1.414 は 1 と 2 の間にあります。

  • 例えば a = 0.8 の場合、その平方根 0.89443 は 0.8 と 1 の間にあります。


a > 1 と仮定します。私たちの方法は、1 と a の中間値 a1 = (a + 1) / 2 を取ります。もし a1 の二乗が a より大きい場合、平方根は必ず 1 と a1 の間にあります。そうでなければ a1 と a の間にあります。誤差が十分小さくなるまで順次反復します。

以下は実装コードです。

import sys  # ユーザー入力パラメータを取得するため
def cal_sqrt_with_newton(start, end, target, stop):  # 平方根を計算する
    while True:  # ずっとループする
        mid = (start + end) / 2.0
        if abs((mid * mid) - target) < stop:  # 精度が要求を満たした場合
            return mid  # 中間値を返す
        else:
            if (mid * mid) > target:  # そうでなければ二分法を続ける
                end = mid
            else:
                start = mid
def py_sqrt(v):
    if v > 1.0:  # 値が 1 より大きい場合、1 と v の間
        return cal_sqrt_with_newton(1.0, v, v, 1.0e-6)
    else:  # 値が 1 より小さい場合、v と 1 の間
        return cal_sqrt_with_newton(v, 1.0, v, 1.0e-6)
def test(v):  # 計算結果をテストする
    ret = py_sqrt(v)
    print("sqrt(%s) = %s" % (v, ret))  # 計算結果を表示する
if __name__=='__main__':
    input = float(sys.argv[1])
    test(input)

実行後の結果は次の通りです。

$ python sqrt2.py 2.0       # 2 の平方根を計算する
sqrt(2.0) = 1.41421365738   # 計算結果
$ python sqrt2.py 0.5       # 0.5 の平方根を計算する
sqrt(0.5) = 0.707106590271  # 計算結果


注意すべきは、再帰呼び出しを使用しているため、高精度の結果を得たい場合、呼び出し深度が超える可能性があります。


post
  • 26

    item of content
Pythonの基本データ型は全部で26章あります。
この章では、整数型、浮動小数点数、文字列、ブール型、リスト、タプル、セットおよび辞書など、Pythonが提供する基本的なデータ型について紹介します。また、これらのデータ型に対する演算操作についても解説します。
私たちはPythonが強タイプ言語であることを知っています。つまり、各変数の型は特定の時点でのみ確定します。言い換えれば、Pythonにおける任意の生存しているオブジェクトの型は一意です。異なる型のオブジェクトには異なる属性があり、異なる操作を実行できます。
さらに、この章の最後では変数やオブジェクトなどの概念についても触れられます。それぞれのオブジェクトには確定した型があり、各変数は特定のオブジェクトを指し示します。