package main import ( "fmt" "math" ) const min_threshold = 1e-200 func Sqrt(x float64, threshold float64) (z float64, iterations int) { z = x old_z := z for { z = z - (z*z-x)/(2*x) if math.Abs(z-old_z) < threshold { break } old_z = z iterations++ } return } func main() { threshold := 1.0 right_answer := math.Sqrt(2) for threshold > min_threshold { answer, iterations := Sqrt(2, threshold) fmt.Printf("%0.4g %0.4g %0.20f %0.20f %0.2d\n", threshold, right_answer-answer, right_answer, answer, iterations) threshold = threshold / 10.0 } }