object Main extends App { def abs(x:Double) = if (x < 0) -x else x def sqrtIter(guess: Double, x: Double): Double = if (isGoodEnough(guess, x)) guess else sqrtIter(improve(guess, x), x) def isGoodEnough(guess: Double, x: Double) = abs(guess * guess - x ) /x < 0.001 def improve(guess: Double, x: Double) = (guess + x / guess) / 2 def sqrt(x: Double) = sqrtIter(1.0, x) println(sqrt(2)) println(sqrt(0.001)) println(sqrt(0.1e-20)) println(sqrt(1.0e20)) println(sqrt(1.0e50)) }