def sqrtIter
(lastDiff
: Double, guess
: Double
): Double
= { val improved
= improve
(guess
) val diff
= computeDiff
(improved
) sqrtIter(diff, improved)
guess
}
}
def computeDiff
(guess
: Double
) = math.
abs(square
(guess
) - x
) def square
(num
: Double
) = num
* num
def improve
(guess
: Double
) = (guess + x / guess
) /
2 sqrtIter(Double.PositiveInfinity, 1.0)
}
Seq(
math.sqrt(2),
sqrt(2),
math.sqrt(0.001),
math.sqrt(0.1e-20),
math.sqrt(1.0e20),
math.sqrt(1.0e50),
sqrt(0.001),
sqrt(0.1e-20),
sqrt(1.0e20),
sqrt(1.0e50)
).foreach(println)
}
b2JqZWN0IE1haW4gZXh0ZW5kcyBBcHAgewogIGRlZiBzcXJ0KHg6IERvdWJsZSkgPSB7CiAgICBkZWYgc3FydEl0ZXIobGFzdERpZmY6IERvdWJsZSwgZ3Vlc3M6IERvdWJsZSk6IERvdWJsZSA9IHsKICAgICAgdmFsIGltcHJvdmVkID0gaW1wcm92ZShndWVzcykKICAgICAgdmFsIGRpZmYgPSBjb21wdXRlRGlmZihpbXByb3ZlZCkKICAgICAgaWYgKGRpZmYgPCBsYXN0RGlmZikgewogICAgICAgIHNxcnRJdGVyKGRpZmYsIGltcHJvdmVkKQogICAgICB9IGVsc2UgewogICAgICAgIGd1ZXNzCiAgICAgIH0KICAgIH0KICAgIGRlZiBjb21wdXRlRGlmZihndWVzczogRG91YmxlKSA9IG1hdGguYWJzKHNxdWFyZShndWVzcykgLSB4KQogICAgZGVmIHNxdWFyZShudW06IERvdWJsZSkgPSBudW0gKiBudW0KICAgIGRlZiBpbXByb3ZlKGd1ZXNzOiBEb3VibGUpID0gKGd1ZXNzICsgeCAvIGd1ZXNzKSAvIDIKICAgIHNxcnRJdGVyKERvdWJsZS5Qb3NpdGl2ZUluZmluaXR5LCAxLjApCiAgfQoKICBTZXEoCiAgICBtYXRoLnNxcnQoMiksCiAgICBzcXJ0KDIpLAogICAgbWF0aC5zcXJ0KDAuMDAxKSwKICAgIG1hdGguc3FydCgwLjFlLTIwKSwKICAgIG1hdGguc3FydCgxLjBlMjApLAogICAgbWF0aC5zcXJ0KDEuMGU1MCksCiAgICBzcXJ0KDAuMDAxKSwKICAgIHNxcnQoMC4xZS0yMCksCiAgICBzcXJ0KDEuMGUyMCksCiAgICBzcXJ0KDEuMGU1MCkKICApLmZvcmVhY2gocHJpbnRsbikKfQo=