import scala.annotation.tailrec def THRESHOLD: Double = 0.0001 def sqr(x: Double): Double = x * x def isGoodEnough(x: Double): Boolean = if (x < 0) x > THRESHOLD else x < THRESHOLD def improve(x: Double, approx: Double) = approx - (sqr(approx) - x) / (2 * approx) @tailrec def sqrt(x: Double, approx: Double): Double = if ( isGoodEnough(sqr(approx) - x) ) { approx } else { sqrt(x, improve(x, approx)) } sqrt(612, 10)