行イム苦労は以下のとおりです。このコードでは何が起きているのですか?
while not withinEpsilon(ans**pwr, val, epsilon)
:withinEpsilonが偽である間、実行を継続、それはありますか?なぜ負の絶対値が必要なのですか?それはなぜmax valと1の間ですか?
low = -abs(val) high = max(abs(val), 1.0)
if isEven(pwr) and val < 0:
電源さえした場合、なぜそれは問題でしょうか?ここで
は完全なコードです:
def isEven(i):
'''assumes i is a positive int
returns true if i is even, otherwise False'''
return i%2 == 0
def findRoot(pwr, val, epsilon):
'''assumes pwr an int; val, epsilon floats > 0'''
assert type(pwr) == int
assert type(val) == float
assert type(epsilon) == float
assert pwr > 0 and epsilon > 0
if isEven(pwr) and val < 0:
return None
low = -abs(val)
high = max(abs(val), 1.0)
ans = (high + low)/2.0
while not withinEpsilon(ans**pwr, val, epsilon):
#print 'ans =', ans, 'low =', low, 'high =', high
if ans**pwr < val:
low = ans
else:
high = ans
ans = (high + low)/2.0
return ans
def testFindRoot():
"""x float, epsilon float, pwr positive int"""
for x in (-1.0, 1.0, 3456.0):
for pwr in (1, 2, 3):
ans = findRoot(pwr, x, 0.001)
if ans == None:
print 'The answer is imaginary'
else:
print ans, 'to the power', pwr,\
'is close to', x
testFindRoot()
ここでは、「自分のコードで何が問題なの?」という質問をここに書き込まないようにしています。何を試しましたか?何が効いているの?簡潔な期待と実際の入力と出力を提供してください。 –
コードはどこから来たのですか?他の人のコードの説明を探していますか? –
@AlexRosenfeld:「自分のコードには何が問題なのですか」という質問はありませんが、「このコードを理解するのに役立ちます」という質問には答えが難しい場合があります。 –