練習問題 3.6.4

収束をテストするもう1つの方法は,連続する2つの近似値
y
y'
が十分に近いときに停止することである.


abs (y - y') < eps * abs y
sqrt
の定義を書き換えてこのテストを使うようにせよ. 実際に使う場合にはこのテストあるいは前問のテストのほうが優れている理由を説明せよ.



sqrt :: Double -> Double
sqrt x = until done improve x
         where  done y = abs (y - improve y) < eps * abs y
                improve y = (y+x/y)/2

eps :: Double
eps = 0.000001
abs (y * y - x) < eps
の場合には
x
の値が小さいと根の有効桁がすくなくなり,
x
eps
より小さい数については計算できない.一方,練習問題3.6.3,3.6.4の方法であれば有効桁はほぼ一定にたもたれる.