博客学习参考:
https://blog.csdn.net/junlon2006/article/details/79766188
视频学习
https://www.bilibili.com/video/av52050885/
「珂学原理」No.95「骚代码是怎样炼成的」解剖快速平方根倒数算法
package main
import "fmt"
import "unsafe"
func sqrt(x float64, i float64) (float64, float64) {
remain := (i*i - x) / (2 * i)
i = i - remain
if remain > 0 {
return sqrt(x, i)
} else {
return i, remain
}
}
func get_sqrt(x float64) float64 {
i, _ := sqrt(x, x)
return i
}
func get_sqrt2(x float32) float32 {
xhalf := 0.5 * x
var i int32 = *(*int32)(unsafe.Pointer(&x))
i = 0x5f375a86 - (i >> 1)
x = *(*float32)(unsafe.Pointer(&i))
x = x * (1.5 - xhalf*x*x)
// x = x * (1.5 - xhalf*x*x)
// x = x * (1.5 - xhalf*x*x)
return 1 / x
}
func main() {
}