二等分法を使用して平方根を求めます。

高洛峰
リリース: 2016-10-19 13:40:27
オリジナル
3534 人が閲覧しました

二等分法を使用して平方根を求めます。

def sqrtBI(x, epsilon):
    assert x>0, 'X must be non-nagtive, not ' + str(x)
    assert epsilon > 0, 'epsilon must be postive, not ' + str(epsilon)
  
    low = 0
    high = x
    guess = (low + high)/2.0
    counter = 1
    while (abs(guess ** 2 - x) > epsilon) and (counter <= 100):
        if guess ** 2 < x:
            low = guess
        else :
            high = guess
        guess = (low + high)/2.0
        counter += 1
    return guess
ログイン後にコピー

確認してください。

>>> sqrtBI(2,0.000001)

>>> 1.41421365738

X<1 の場合、上記のメソッドには問題が発生します。 X の平方根 (X<1) が [0, x] の範囲にないためです。たとえば、0.25、その平方根 - 0.5 は区間 [0, 0.25] にありません。 <1 ,就会有问题。因为 X (X<1)的平方根不在 [0, x] 的范围内。例如,0.25,它的平方根——0.5 不在 [0, 0.25] 的区间内。

>>> sqrtBI(0.25,0.000001)

>>> 0.25

では、0.25 の平方根を求めるにはどうすればよいでしょうか?

上記のコードを少し変更するだけです。コードの 6 行目と 7 行目に注目してください。

def sqrtBI(x, epsilon):
    assert x>0, &#39;X must be non-nagtive, not &#39; + str(x)
    assert epsilon > 0, &#39;epsilon must be postive, not &#39; + str(epsilon)
  
    low = 0
    high = max(x, 1.0)
    ## high = x
    guess = (low + high)/2.0
    counter = 1
    while (abs(guess ** 2 - x) > epsilon) and (counter <= 100):
        if guess ** 2 < x:
            low = guess
        else :
            high = guess
        guess = (low + high)/2.0
        counter += 1
    return guess
ログイン後にコピー

確認してください:

>>> sqrtBI(0.25,0.000001)

>>> 0.5


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!