Home SICP 연습문제 1.7
Post
Cancel

SICP 연습문제 1.7

good-enough? 가 매우 작은 숫자의 square roots를 계산하는데 효과적이지 못 하다고 한다. 그리고 real computer에서 산술 연산은 제한된 정확도에서 수행이 된다, 이것 때문에 매우 큰 숫자를 테스트하는 것이 부적당하다고 한다. 그렇다면, 큰 숫자나 작은 숫자에서 테스트가 실패하는 경우를 찾아 보기로 했다.

값이 작을 경우

기존 방법의 결과

  정답

  결과의 차이가 200%가 넘게 생긴다는 것을 알 수가 있다.

값이 클 경우

기존의 방법의 결과

값을 입력 후 밑에 있는 졸라맨은 계속해서 달리지만, 결과는 볼 수가 없었다.

정답의 근사 값

  우선 good-enough?를 보면, guess의 값을 제곱하여 실제 값과의 차이가 0.001인지 비교한다. 즉, 0.001이란 값은 작은 값을 계산할 경우의 큰 값이므로 오차가 많이 생기게 된다. 그리고 큰 값을 계산할 경우에는 컴퓨터의 제한된 정확도의 계산으로 인해서 0.001 차이보다 크게 발생할 경우에 무한 루프에 빠지는 결과를 발생하게 되는 문제점을 가지고 있다.

다음은 이러한 문제를 해결하기 위한 good-enough?이다.

1
2
3
4
(define (good-enough? guess x)
(< (abs (- (improve guess x) guess)) (abs (* guess 0.00001))))

This post is licensed under CC BY 4.0 by the author.

SICP 연습문제 1.6

SICP 연습문제 1.8