이 문제는 아주 작은 수나 큰 수에서 제대로 찾아내지 못하는 점에 대해 얘기합니다.

 

13

실제로 0.0001과 1000000의 제곱근을 제대로 출력하지 못합니다.

(각각 0.01과 1000이 나와야죠.)

 

하지만 그 다음 문제가 제대로 이해되지 않았습니다.

'good-enough?를 만드는 여러 방법 가운대 하나는,

참값에 더 가까운 값 guess를 구하기 위해 어림잡은 값을 조금씩 고쳐 나가면서

헌 값에 견주어 고친 값이 그다지 나아지지 않을 때까지 계산을 이어가는 것이다.

이 방법에 따라 위에서 만든 제곱근 프로시저를 고쳐 보자.'

 

한글인데도 무슨 말인지 이해가 되지 않아 원서를 찾아 읽어봤습니다.

'An alternative strategy for implementing good-enough? is to watch

how guess changes from one iteration to the next

and to stop when the change is a very small fraction of the guess.

Design a square-root procedure that uses this kind of end test.'

 

영어로 봐도 잘 모르겠습니다.OTL...

그래서 미리 정한 폭(predetermined tolerance)를 줄여보았습니다.

 

14

전보다는 많이 근접하였습니다.

15

점점 정교해지네요.

16

1000.0이라고 제대로 나왔습니다.^^

17

0.01이라 깨끗하게 나왔습니다.^^

 

이렇듯 폭을 점점 줄여나갈수록 근사값은 더더욱 정교해집니다.

하지만 문제에서 원하는 답이 이것이 맞는지 잘 모르겠습니다.~_~;;

 

 

참조

Structure and Interpretation of Computer Programs 2/E - Page 34

크리에이티브 커먼즈 라이센스
Creative Commons License
TAG , ,

글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.

트랙백 주소 :: http://nosyu.pe.kr/trackback/1171

댓글을 달아 주세요

  1. ClauXewitz 2008/10/10 19:10  댓글주소  수정/삭제  댓글쓰기

    저는 저 말을 improve하기 바로 전의 guess값과 후의 guess값의 차이가 일정 수준 이하가 될 때까지 돌려보라는 의미로 알았습니다. 실제 제곱근의 값에 근접할 수록 계산 과정에서 guess값들의 차이가 얼마 나지 않는다는 것을 이용한 것이지요. 그래서 good-enough?의 정의를 한 번 바꿔봤습니다.

    (define (good-enough? guess x)
    (< (abs (- (improve guess x) guess)) 0.001))

    이렇게 하니까 0.0001의 제곱근은 확실히 전보다 비슷하게 나오더군요. 근데 적당히 큰 숫자에서는 되려 안좋은 결과가 나오기도 해요^^;

    • NoSyu 2008/10/11 00:17  댓글주소  수정/삭제

      반갑습니다.
      아.. 그렇게 해석이 되는건가요?
      전의 값과 후의 값을 비교한다...

      오랜만에 보니 저도 모호해지네요.^^;;;;
      (더군다나 지금 시험기간이라 정신이..;;;)
      이번 겨울방학 때 4, 5장을 끝내면 다시 처음부터 달릴 생각인지라...
      그 때 잘 부탁드립니다.^^

    • softdie 2008/11/29 18:30  댓글주소  수정/삭제

      이게 맞는 해석 같네요..;

    • NoSyu 2008/11/29 19:59  댓글주소  수정/삭제

      반갑습니다.
      softdie님도 말씀하신다니 맞는 듯싶습니다.^^
      위에 글을 적었듯이 이번 겨울방학 때 완결을 보고 다시 훓어볼 때 좀 더 정확한 제 의견을 남기겠습니다.

[로그인][오픈아이디란?]