(wat-aro)

無職から有職者にランクアップしました

SICP 問題1.7

小さい数だと0.03くらいで計算が終わってしまう.
大きい数だと仮数部の比較がうまくいかず終わらない.
 
問題文にあるようにgood-enough?を改良する.

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

これだとうまく動いた.

問題1.6、問題1.7 – SICP(計算機プログラムの構造と解釈)その2 : Serendip - Webデザイン・プログラミング

こちらに書かれている2番目のもののほうが精度が良いようだ.

(define (improved-good-enough2? old-guess new-guess)
  (< (abs (- 1.0 (/ old-guess new-guess))) 0.001))

;; 改良型improved-good-enough2? を使用
(define (improved-sqrt-iter2 old-guess new-guess x)
  (if (improved-good-enough2? old-guess new-guess)
      new-guess
      (improved-sqrt-iter2 new-guess (improve new-guess x) x)))

(define (improved-mysqrt2 x)
  (improved-sqrt-iter2 1.0 x x))