|
func root(a float64, n int) float64 {
|
|
n1 := n - 1
|
|
n1f, rn := float64(n1), 1/float64(n)
|
|
x, x0 := 1., 0.
|
|
for {
|
|
potx, t2 := 1/x, a
|
|
for b := n1; b > 0; b >>= 1 {
|
|
if b&1 == 1 {
|
|
t2 *= potx
|
|
}
|
|
potx *= potx
|
|
}
|
|
x0, x = x, rn*(n1f*x+t2)
|
|
if math.Abs(x-x0)*1e15 < x {
|
|
break
|
|
}
|
|
}
|
|
return x
|
|
}
|