为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Go中扎根?

如何在Go中扎根?

Go
Cats萌萌 2021-05-21 18:05:55
我正在使用牛顿方法在Google Go中编写多维数据集根函数。我想使用math /检查结果cmplx.Pow(),但是对于我自己的一生,我不知道该怎么做。我该怎么做呢?
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

你试过了myCubicRootOfx = Pow(x, 1.0/3)吗?

编辑:感谢Jason McCreary评论:
我们不能将其1/3用作第二个参数,Pow因为这是整数除法,因此不会产生预期的1/3值。通过使用1.0/31/3.0等,我们可以有效地产生一个带有0.333333 ...值的浮点数。


查看完整回答
反对 回复 2021-05-24
?
aluckdog

TA贡献1847条经验 获得超7个赞

在Go Tour练习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))

}


查看完整回答
反对 回复 2021-05-24
?
忽然笑

TA贡献1806条经验 获得超5个赞

当您使用牛顿法时,我想您是从一个正实数开始的。


因此,您不需要复数。


你可以简单地做


package main


import (

    "fmt"

    "math"

)


func main() {

    x := 100.0

    root := math.Pow(x, 1.0/3.0)

    fmt.Println(root)

}


查看完整回答
反对 回复 2021-05-24
  • 3 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信