假设输入的数是 $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}