;;; Newton法 p.13
( define ( sqrt-iter guess x)
if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
( define ( improve guess x)
(average guess (/ x guess)))
( define ( average x y)
(/ (+ x y) 2))
( define ( good-enough? guess x)
( let ((tolerance 0.001))
(< (abs (- (square guess) x)) tolerance)))
( define ( sqrt x)
(sqrt-iter 1.0 x))
非常に小さい数のとき
例えば、
(sqrt 0.0001)など、許容値0.001を下回る数値の平方根を求めようとすると、guessの値の小数点以下3桁が許容値以下となると再帰呼び出しが停止する。
非常に大きい数のとき
例えば、10兆の平方根を求めようとすると途中からguessの値が変化しなくなり無限ループに陥る。
guessの変化の値に注目したgood-enough?
SICPの問題1.7を素直に実装してみました。ある繰り返しから次の繰り返しのguessが許容値未満しか変化しなかったときに停止します。許容値を小さくすれば正確さが高くなります。
( define ( good-enough? guess next-guess)
( let ((tolerance 0.0001))
(< (abs (- next-guess guess)) tolerance)))
( define ( sqrt-iter guess x)
( let ((next-guess (improve guess x)))
( if (good-enough? guess next-guess)
next-guess
(sqrt-iter next-guess x))))
小さい値や大きい値にもある程度正確な結果を返しています。
新品価格
¥4,968 から
(2017/4/4 18:13時点)
タグ: 計算機プログラムの構造と解釈
【このカテゴリーの最新記事】
- no image
- no image