gpt4 book ai didi

go - golang 中奇怪的 pow 实现

转载 作者:IT王子 更新时间:2023-10-29 00:41:33 26 4
gpt4 key购买 nike

我刚刚遇到 the Pow implementation in golang :

func Pow(x, y float64) float64 {
// ...
case x == 0:
switch {
case y < 0:
if isOddInt(y) {
return Copysign(Inf(1), x)
}
return Inf(1)
case y > 0:
if isOddInt(y) {
return x
}
return 0
}
//...
}

case y > 0 部分是不是太复杂了?我只会返回 0。还是我错过了什么?

最佳答案

有两种类型的零,+0-0Pow(-0,1) 的返回值应该是 -0 而不是 +0

要在 golang 中创建 -0,请使用 math.Copysign

x := math.Copysign(0, -1)
if x == 0 {
fmt.Println("x is zero")
}
fmt.Println("x ** 3 is", math.Pow(x, 3))

上面代码的输出是

x is zero
x ** 3 is -0

可以在Go Playground中查看

为什么要区分+0-0,看: https://softwareengineering.stackexchange.com/questions/280648/why-is-negative-zero-important

关于go - golang 中奇怪的 pow 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com