Newton's method

简易入门了解:

https://jingyan.baidu.com/article/f79b7cb31082079144023ebb.html

wiki:

https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95/10887580?fr=aladdin

https://en.wikipedia.org/wiki/Newton%27s_method

简单的说, 是一个不断替换中间变量 -> 判断是落入收敛区间 -> 继续判断不断趋近结果 的过程

牛顿迭代法 求开方:

package main

import (
"fmt"
)

func main() {
fmt.Printf("sqrt(int x): %d", mySqrt(8))
}

func mySqrt(x int) int {
if x == 0 {
return 0
}
xF := float64(x)

return bingo(xF/2, xF)
}

func bingo(m float64, init float64) int {
result := (m + init/m) / float64(2.0)
fmt.Printf("m: %f , result: %f \n", m, result)
if int(m) == int(result) {
return int(m)
}
return bingo(result, init)
}

注: 在搜索过程中 发现了更神奇的 卡马克传奇:

https://en.wikipedia.org/wiki/Fast_inverse_square_root

故事源于 雷神之锤 3 中的一段神奇的代码. 有兴趣可以去了解下