이 문제는 아주 작은 수나 큰 수에서 제대로 찾아내지 못하는 점에 대해 얘기합니다.
실제로 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)를 줄여보았습니다.
전보다는 많이 근접하였습니다.
점점 정교해지네요.
1000.0이라고 제대로 나왔습니다.^^
0.01이라 깨끗하게 나왔습니다.^^
이렇듯 폭을 점점 줄여나갈수록 근사값은 더더욱 정교해집니다.
하지만 문제에서 원하는 답이 이것이 맞는지 잘 모르겠습니다.~_~;;
참조
Structure and Interpretation of Computer Programs 2/E - Page 34
- SICP Exercise 연습문제 1.11 (0)2008/01/04
- SICP Exercise 연습문제 1.9 (7)2008/01/04
- SICP Exercise 연습문제 1.8 (4)2007/12/18
- SICP Exercise 연습문제 1.7 (4)2007/12/18
- SICP Exercise 연습문제 1.6 (5)2007/12/18
- SICP Exercise 연습문제 1.5 (4)2007/12/17
- SICP Exercise 연습문제 1.4 (0)2007/12/17
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.













댓글을 달아 주세요
저는 저 말을 improve하기 바로 전의 guess값과 후의 guess값의 차이가 일정 수준 이하가 될 때까지 돌려보라는 의미로 알았습니다. 실제 제곱근의 값에 근접할 수록 계산 과정에서 guess값들의 차이가 얼마 나지 않는다는 것을 이용한 것이지요. 그래서 good-enough?의 정의를 한 번 바꿔봤습니다.
(define (good-enough? guess x)
(< (abs (- (improve guess x) guess)) 0.001))
이렇게 하니까 0.0001의 제곱근은 확실히 전보다 비슷하게 나오더군요. 근데 적당히 큰 숫자에서는 되려 안좋은 결과가 나오기도 해요^^;
반갑습니다.
아.. 그렇게 해석이 되는건가요?
전의 값과 후의 값을 비교한다...
오랜만에 보니 저도 모호해지네요.^^;;;;
(더군다나 지금 시험기간이라 정신이..;;;)
이번 겨울방학 때 4, 5장을 끝내면 다시 처음부터 달릴 생각인지라...
그 때 잘 부탁드립니다.^^
이게 맞는 해석 같네요..;
반갑습니다.
softdie님도 말씀하신다니 맞는 듯싶습니다.^^
위에 글을 적었듯이 이번 겨울방학 때 완결을 보고 다시 훓어볼 때 좀 더 정확한 제 의견을 남기겠습니다.