ニュートン法による平方根・立方根
-- 平均値 myaverage x y = (x + y) / 2 -- 平方根 mysqrt x = let { good_enough guess y = ( abs((guess*guess - y) / y) < 1e-10 ) ; val_improve guess y = myaverage guess (y/guess) ; sqrt_iter guess y = if (good_enough guess y) then guess else sqrt_iter (val_improve guess y) y } in sqrt_iter 1.0 x
- 立方根
平方根とほとんど同じ。
-- 立方根 mycbrt x = let { good_enough guess y = ( abs((guess**3 - y) / y) < 1e-10 ) ; val_improve guess y = ( y/(guess**2) + 2.0*guess ) / 3.0 ; cbrt_iter guess y = if (good_enough guess y) then guess else cbrt_iter (val_improve guess y) y } in cbrt_iter 1.0 x