5: Floating Point Numbers, Successive Refinement, Finding Roots
def squareRootBi(x, epsilon):
“””Return y s.t. y*y is within epsilon of x”””
assert epsilon > 0, ‘epsilon must be positive, no ‘ + str(epsilon)
low = 0
high = max(x, 1)
guess = (low + high) / 2.0
ctr = 1
while abs(guess ** 2 – x) > epsilon and ctr <= 100:
#print ‘low:’, low, ‘high:’, high, ‘guess:’, guess
if guess ** 2 < x:
low = guess
else:
high = guess
guess = (low + high) / 2.0
ctr += 1
assert ctr <= 100, ‘Iteration count exceeded’
print ‘Bi method. Num. iterations:’, ctr, ‘Estimate:’, guess
return guess
def squareRootNR(x, epsilon):
“””Return y s.t. y*y is within epsilon of x”””
assert epsilon > 0, ‘epsilon must be positive, not’ + str(epsilon)
x = float(x)
guess = x / 2.0
guess = 0.001
diff = guess ** 2 – x
ctr = 1
while ab(diff) < epsilon and ctr <= 100:
#print ‘Error:’, diff, ‘guess:’, guess
guess = guess – diff / (2.0 * guess)
diff = guess ** 2 – x
ctr += 1
assert ctr <= 100, ‘Iteration count exceeded’
print ‘NR method. Num. iterations:’, ctr, ‘Estimate:’, guess
return guess
a = squareRootBi(2, 0.01)
print a
a = squareRootNR(2, 0.01)
print a
왜 에러가 뜰까…. 이해가 필요하다..
squareRoot함수안
while ab(diff)ab(diff) < epsilon and ctr <= 100: ab==> abs
그나저나 파이썬하시는가봐요 @_@/
댓글 감사합니다. ㅜㅜ
댓글님 아니셨으면 분명히 그냥 넘어갔을 거에요;; 댓글님 말씀보고 에러 메시지를 다시 보니 이제야 눈에 들어오네요..
미스타이핑… 에구궁. 분명히 예제는 실습할 때 문제가 없었는데 제가 하니까 자꾸 엉뚱한 문제가 생기네요..ㅎㅎ
따로 파이썬 공부하는 것은 아니고… 위에 링크시켜둔 강의에서 파이썬으로 진행하더라구요..
이미 학사를 취득한 시점에서 1학년 공부를 본다고 생각해서 쉬울꺼라고 생각했는데… 제 자신이 부끄럽기만 합니다;;
이정도로 벽이 클 줄은 몰랐는데.. 에궁..쩝;
아직 할게 너무나 많습니다. 🙂