fork download
  1. object Main extends App {
  2. def sqrt(x: Double) = {
  3. def square(num: Double): Double =
  4. num * num
  5. def sqrtIter(guess: Double): Double =
  6. if (isGoodEnough(guess)) guess
  7. else sqrtIter(improve(guess))
  8. def improve(guess: Double) =
  9. (guess + x / guess) / 2
  10. def isGoodEnough(guess: Double) =
  11. math.abs(square(guess) - x) < 0.000000000000001 * x
  12. sqrtIter(1.0)
  13. }
  14. Seq(
  15. math.sqrt(2),
  16. sqrt(2),
  17. math.sqrt(0.001),
  18. math.sqrt(0.1e-20),
  19. math.sqrt(1.0e20),
  20. math.sqrt(1.0e50),
  21. sqrt(0.001),
  22. sqrt(0.1e-20),
  23. sqrt(1.0e20),
  24. sqrt(1.0e50)
  25. ).foreach(println)
  26. }
Success #stdin #stdout 0.38s 322240KB
stdin
Standard input is empty
stdout
1.4142135623730951
1.414213562373095
0.03162277660168379
3.1622776601683794E-11
1.0E10
1.0E25
0.03162277660168379
3.162277660168379E-11
1.0E10
1.0E25