Vraj Mohan <[EMAIL PROTECTED]> writes: > I am new to Haskell and need help in debugging my code. > > I wrote the following function for calculating square roots using Newton's > method: > > my_sqrt :: Float -> Float > my_sqrt x = improve 1 x > where improve y x = if abs (y * y - x) < epsilon > then y > else improve ((y + (x/y))/ 2) x > epsilon = 0.00001 > > > > This works for several examples that I tried out but goes into an infinite > loop > for my_sqrt 96.
Generally it's better to separate out the different parts of the algorithm. So sqrt_step x candidate = (candidate + x/candidate)/2 Now you can try take 20 $ iterate (sqrt_step 2) 1 and watch the convergence. When you're happy with that, you can use something like “head . dropWhile unconverged”. > (The equivalent code is well-behaved on MIT Scheme) Is it? Is there equivalent code to “my_sqrt :: Float -> Float”? (that might be pertinent). -- Jón Fairbairn [EMAIL PROTECTED] http://www.chaos.org.uk/~jf/Stuff-I-dont-want.html (updated 2006-09-13) _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe