summaryrefslogtreecommitdiffstats
path: root/Scala/sandbox/1-sqrt.scala
blob: c76ee00a8befd7e219e7c07ffabc3a01ca4fed47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

object Sqrt {

  def abs(x:Double) = if (x < 0) -x else x

  def sqrt(x: Double) = {

    def sqrtIter(guess: Double): Double =
      if (isGoodEnough(guess)) guess
      else sqrtIter(improve(guess))

    def isGoodEnough(guess: Double) =
      abs(guess * guess - x ) /x < 0.001

    def improve(guess: Double) =
      (guess + x / guess) / 2

    sqrtIter(1.0)
  }

  def run = {
    println("Sqrt")
    println(sqrt(2))
    println(sqrt(0.001))
    println(sqrt(0.1e-20))
    println(sqrt(1.0e20))
    println(sqrt(1.0e50))
  }

}