用牛顿法实现平方根函数
03 Oct 2017算法原理
牛顿法是通过选择一个起点 z 然后重复以下过程来求 Sqrt(x) 的近似值:
z -= (z*z - x) / (2 * z)
迭代一定次数之后,z 的值就是 Sqrt(x) 的近似值
详细算法原理可以看:如何通俗易懂地讲解牛顿迭代法
Go 语言实现
第一种实现,迭代5次后停止循环
package main
import (
"fmt"
"math"
)
func Sqrt(x float64) float64 {
z := 1.0
for i := 0; i < 5; i++ {
z -= (z*z - x) / (2 * z)
}
return z
}
func main() {
n := 2.0
fmt.Println(Sqrt(n))
fmt.Println(math.Sqrt(n))
}
迭代5次的运行结果
1.4142135623730951
1.4142135623730951
迭代到前后值相差为 1e-6 时,停止迭代
package main
import (
"fmt"
"math"
)
const delta = 1e-6
func Sqrt(x float64) float64 {
z := x
n := 0.0
for math.Abs(n-z) > delta {
n, z = z, z-(z*z-x)/(2*z)
}
return z
}
func main() {
const x = 2
mine, theirs := Sqrt(x), math.Sqrt(x)
fmt.Println(mine, theirs, mine-theirs)
}