40のおっさんのPython学習記録

20年以上前、学部の必修のC言語が全く理解できずに同級生に放り投げ、その後コーディングから遠ざかったガチ文系のおっさんが、ふと思い立ってPythonに挑戦しています。

どないせいっちゅーねん

おっさんです。ゴールデンウィークだけどもくもく会に来ています。明後日のもくもく会にもいきます。参加する方よろしくお願いします。

下のコードは2分法と言い、ある数の平方根の近似値を求めるのに、大きい数字から初めて、ループのたびに探索すべき範囲を半分に削減しながら進む、というもので、それ自体は特に難しくもなく、ほー、そうけ、以上の感想もないのだけど、問題はこのコードに付随した指練習で、xを負数にした場合はどうなるか、負数の平方根を求めるようにするにはどうすればよいかというもの。ヒントでlowを変化させようとか書いてあるけど、下のコードは複素数に対応させるためには1から書き直す必要があるじゃん…どうしたらいいのよ…ていうか問題設定間違ってるんじゃないの?複素数平方根のlowってなんじゃそれ?としか思えんのだけど。誰か答えわかります?答えのないテキストを解いていくことの限界を既に感じているおっさんです。

x = 25
epsilon = 0.01
numGuess = 0
low = 0.01
high = max(1.0,x)
ans = (high + low)/2

while abs(ans**2-x)>=epsilon:
    print('low =', low, 'high=', high, 'ans=', ans)
    numGuess +=1
    if ans**2<x:
        low = ans
    else:
        high = ans
    ans = (high + low)/2
print('numGuess=', numGuess)
print(ans, 'is close to square root of', x)