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

왜 에러가 뜰까…. 이해가 필요하다..

Tags: ,

2 Comments on Lec 5 | MIT 6.00 Introduction to Computer Science and Programming, Fall 2008

  1. 넷평 says:

    squareRoot함수안
    while ab(diff)ab(diff) < epsilon and ctr <= 100: ab==> abs
    그나저나 파이썬하시는가봐요 @_@/

    • 탱이 says:

      댓글 감사합니다. ㅜㅜ

      댓글님 아니셨으면 분명히 그냥 넘어갔을 거에요;; 댓글님 말씀보고 에러 메시지를 다시 보니 이제야 눈에 들어오네요..

      미스타이핑… 에구궁. 분명히 예제는 실습할 때 문제가 없었는데 제가 하니까 자꾸 엉뚱한 문제가 생기네요..ㅎㅎ

      따로 파이썬 공부하는 것은 아니고… 위에 링크시켜둔 강의에서 파이썬으로 진행하더라구요..

      이미 학사를 취득한 시점에서 1학년 공부를 본다고 생각해서 쉬울꺼라고 생각했는데… 제 자신이 부끄럽기만 합니다;;

      이정도로 벽이 클 줄은 몰랐는데.. 에궁..쩝;

      아직 할게 너무나 많습니다. 🙂

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.