我正在使用Newton的方法在Google Go中编写立方根函数.我想用math /检查结果cmplx.Pow(),但对于我的生活,我无法弄清楚如何.我该怎么做呢?
mjv*_*mjv 15
你试过myCubicRootOfx = Pow(x, 1.0/3)吗?
编辑:感谢Jason McCreary评论:
我们不能1/3用作第二个参数,Pow因为这是一个整数除法,因此不会产生预期的1/3值.通过使用1.0/3' or1/3.0`等,我们有效地生成了一个0.333333 ...值的浮点数.
我使用牛顿方法编写了立方根函数,作为Go Tour Exercise 47的一部分.也许下面(Cbrt1和Cbrt)的两个函数是有用的.
package main
import (
"fmt"
"math/cmplx"
)
// Newton's method cube root function that hopes for
// convergence within 20 iterations
func Cbrt1(x complex128) complex128 {
var z complex128 = x
for i:= 0; i < 20; i++ {
z = z - ((z*z*z - x) / (3.0*z*z))
}
return z
}
// Newton's method cube root function that runs until stable
func Cbrt(x complex128) complex128 {
var z, z0 complex128 = x, x
for {
z = z - ((z*z*z - x) / (3.0*z*z))
if cmplx.Abs(z - z0) < 1e-10 {
break
}
z0 = z
}
return z
}
func main() {
fmt.Println(Cbrt(2.0) , "should match" , cmplx.Pow(2, 1.0/3.0))
}
Run Code Online (Sandbox Code Playgroud)