SICP Exercise : 연습문제 1.8 :: 2007/11/09 00:13



밤마다 한시간씩 SICP 문제를 풀어보고 있습니다. 오늘은 1.8을 풀어봤습니다. Scheme 언어에 익숙해지려면 아무래도 시간이 좀 많이 걸리겠군요. 문제 1.8은 이렇습니다.

세제곱근 cube root를 구하는 뉴튼 법은, x의 세제곱근에 가까운 값을 y라고 할 때 다음 식에 따라 y보다 더 가까운 값을 계산하는 것이다.

(x + y^2 + 2y) / 3

제곱근 프로시저처럼, 이 식을 써서 세 제곱근 프로시저를 짜보자.


글쎄 뭐 짜는 것 까지는 좋습니다. 다음과 같은 코드를 작성했습니다.

(define (cube_root x)
  (if (or (= x 0) (< x 0)) 0 (cube_root_iter 1.0 x)))

(define (cube_root_iter guess x)
  (if (good_enough? guess x) guess (cube_root_iter (improve guess x) x)))

(define (good_enough? guess x) (< (/ (abs (- (cube guess) x)) x) 0.01))

(define (cube x) (* x x x))

(define (improve y x) (+ (/ x (* 3 (* y y))) (/ (* 2 y) 3)))

(cube_root 5)


이 간단한 코드를 짜는 데만도 한시간이 걸렸습니다. 그런데 처음에는 이상하게 값이 잘 안나오고 무한루프에 빠지더군요. 의심가는 데가 있어서 google에게 물어봤는데, 아무래도 책(번역판)에 나온 뉴튼법 공식이 좀 잘못된 것 같습니다. 다음과 같이 되어야 할 것 같습니다. (책에 나온 수식의 첫 번째 +가 /로 바뀌면 됩니다.)

사용자 삽입 이미지

위의 코드에서 빨간색으로 표시된 부분이, google이 알려준 뉴튼법 공식에 따라 수정된 부분입니다. 이렇게 고치고 나니, 프로그램이 정상적인 결과를 내 놓았습니다.

이 오류가 한글판의 오류인지 아니면 원서의 오류인지 잘 모르겠어서 구글신에게 다시 물어봤습니다. 한글판의 오류입니다. -_-; 좋은 책입니다만, 40페이지를 넘어가기도 전에 오류를 하나 발견하고 나니 어쩐지 맥이 빠지는 기분입니다1.

이런 기분인거냐?

이런 기분인거냐?



아무튼, 매일 잠들기 전에 하나씩 풀어볼 문제가 생겼다는건 기분 좋은 일이로군요. 아 이제 선형 대수학 책도 봐야하는데... -_-
 

Footnote.
  1. 역자분들의 노고를 폄하하거나 할 의도가 없음을 밝혀둡니다. 어쨌든 좋은 책이고, 사람이란 실수를 하게 마련이니까요. [Back]







 

트랙백 주소 :: http://www.buggymind.com/trackback/72
  • SCIP Exercise 연습문제 1.8

    Tracked from NoSyu의 주저리 주저리 | 2007/12/18 12:46 | DEL

    이 문제는 세제곱근을 구하는 프로시저 제작입니다. &nbsp; 해당 문제에 나오는 식을 보기 전에 Newton's method로 구해보았습니다. (관련글 : 'Newton의 방법(Newton's method)') 그런 후 책을 살펴보니 식이 전혀 다릅니다. 그래서 제가 틀렸다고 생각해 좌절하고 프로시저를 제작하였습니다. &nbsp; 하지만 무한루프를 계속 돌더군요. 그 이유가 무엇일까 코드를 아무리 살펴봤지만 알 수 없었습니다. &nbsp;...

  • SCIP 연습문제 1.8

    Tracked from 탱이의 세상만사 | 2008/01/23 12:56 | DEL

    참으로 허무한 문제다. 분명 나의 계산에는 이상이 없었다. 보고 또 보고, 계속 봐도 나는 틀린게 없었다. 뭐가 문제지? 답은 책이 잘못된 것이었다..... 관련 링크 : http://www.buggymind.com/72 한참을 끙끙대다가 인터넷의 도움을 받기로 하고 검색한 결과 어이없는 내용없다...(하하...) 문제인즉, 세제곱을 구하는 공식이 틀렸던 것이다. 아래의 공식이 정확한 공식이다. 아래는 바뀐 코드 내용이다.

  • Kr015se의 생각

    Tracked from kroisse's me2DAY | 2008/07/11 12:02 | DEL

    SICP 초반부터 고작 연습문제에 난 오자 하나 때문에 무쟈게 고생 ㄱ-;; 찾아보니 같은 데서 낚인 사람들이 꽤 되는 듯

  • gsong | 2007/11/09 10:29 | PERMALINK | EDIT/DEL | REPLY

    Programming Pearls 를 다 보고 이 책을 보려고 작정하고 있습니다. 나중에 연습 문제 풀 때 여기 자주 와야 되겠네요. 전 이거 두권이면 올 겨울은 그냥 지나갈 듯 합니다. ㅎㅎ

  • ks.han | 2007/11/09 15:48 | PERMALINK | EDIT/DEL | REPLY

    명백한 오타네요. ㅡㅡ;;
    사람의 일이라 피하기 힘들다지만... 이런 사항이 보고될 때마다 가슴이 두근두근 댑니다.
    또 다른 대형 사고는 없는지.... 얼마나 더 지나야 안심할 수 있을런지.... 휴~

    지적하신 사항은 오탈자 사이트에 반영해 놓겠습니다.

  • NoSyu | 2007/12/18 12:35 | PERMALINK | EDIT/DEL | REPLY

    어쩐지 제가 뉴튼법으로 구한 식과 책에 적혀있는 것이 다르다고 했습니다.OTL....

성함
비밀번호
홈페이지 비밀글로
< PREV |  1  |  ...  88  |  89  |  90  |  91  |  92  |  93  |  94  |  95  |  96  |  ...  139  |  NEXT >