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))