我试图通过Ocaml计算数字的平方根,这是我的代码:
let isclose x y = abs_float(x -. y)<0.001;;
let average x y = (0.5*.x)+.(0.5*.y);;
let rec guess x y = if isclose y (x /. y) then y else guess x (average y x/.y);;
let sqr x = guess x 1.;;
然后,输入
sqr 1.;;
按预期给出1,但键入
sqr 2.;;
无限期地持续下去。 可以帮助我的错误(我在Python中测试了算法,它按预期工作)。 谢谢你的帮助
答案 0 :(得分:2)
你想要这个:
let rec guess x y =
if isclose y (x /. y) then y else guess x (average y (x/.y))
请注意额外的括号。
的含义
average y x /. y
是
(average y x) /. y
您需要:
average y (x /. y)