牛顿法

假设输入的数是 $m$,则其实是求一个 $ x $ 值,使其满足 $x^2 = m$,令 $f(x) = x^2 - m$ ,其实就是求方程 $f(x) = 0$ 的根。那么 $f(x)$ 的导函数是 $f’(x) = 2x$。 如果是二次函数的话,是很简单的导数运算,切线方程:$y=f′(x_n)(x−x_n)+f(x_n)$,求交点就是把 $y$ 置为零。

 1package main
 2
 3import (
 4	"fmt"
 5	"math"
 6)
 7
 8const err float64 = 1e-8 // err 是允许的误差
 9
10func Sqrt(x float64) float64 {
11	if x < 0 {
12		return -1
13	}
14	root := 1.0
15	for math.Abs(x - root * root) >= err {
16		root -= (root * root - x) / (2 * root)
17	}
18	return root
19}
20
21func main() {
22	fmt.Println(Sqrt(2))
23}