如果y超过64,为什么pow函数返回0?

Efox:

如果y大于64,为什么pow的结果为零?

package main

import (
    "fmt"
)

func pow(x uint64, y uint64) uint64 {
    if y > 64 {
        return 0
    }
    var result uint64 = 1
    var counter uint64
    var previous uint64
    for y > 0 {
        previous = result
        result = result * x
        y = y - 1
        counter++
        if result == 0 {
            return previous
        }
    }
    return result
}

func main() {
    result1 := pow(2, 64)
    fmt.Println(result1)
    result2 := pow(2, 32)
    fmt.Println(result2)
    result3 := pow(2, 3)
    fmt.Println(result3)
}

我只是意识到这是因为它位于基数2中。对此您能说什么?(我对使用Golang编程还是很陌生。)

khrm:

您的战俘不应该基于y。数量越大,数量越少。

用这个:

`

// Assuming that b will never be 0
func mult(a, b uint64) (uint64, bool) {
    result := a * b
    return result, (result/b == a)
}

func pow(x uint64, y uint64) uint64 {
if y == 0 {
    return 1
}
if x == 0 {
    return 0
}
var result uint64 = 1
var counter uint64
var previous uint64
var ok bool
for y > 0 {
    previous = result
    result, ok = mult(result, x)
    if !ok {
        return 0
    }

    y = y - 1
    counter++
    if result == 0 {
        return previous
    }
}
    return result
}

澄清之前的旧答案:

实际上应该是63。这是因为uint64最多可以具有最大数目,即2 ^(64)-1(将2提升为幂64 minux 1)。因此,每2个电源可生成的最大数量为2 ^ 63。

您可以通过运行代码来确认。如果消除y> 64的限制,它将得到与大于63的所有数字相同的结果。(9223372036854775808或2 ^ 63)。该限制应为y> 63。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不Math.pow返回我正确的价值?

为什么Math.pow(0,0)=== 1?

为什么numpy.power对于小指数返回0,而math.pow返回正确答案?

如果compareTo()返回0,为什么暗示对象相等?

为什么math.Pow10(e int)返回float64而不是int64?

如果字符数超过253,为什么TEXT函数不返回任何结果?

pow(sqrt(-1),2)为什么不返回-1?

为什么返回0?

为什么断言后此Solidity函数返回0?

递归函数完成后返回0。为什么“返回0”不覆盖该函数的先前返回值?

为什么此函数返回0

当x和y为字符时,为什么pow(x,y)返回inf?

为什么此函数总是返回0或1

如果传递0,为什么PHP的in_array返回true?

为什么此刻diff函数返回0而不是1

为什么pow函数似乎有故障?

如果已经保证函数可以返回或抛出,为什么必须指定返回值?

为什么ftell在此函数中返回0?

为什么此函数返回0而不是double?

如果长格式有效,如果此语句返回0,为什么会这样呢?

如果javascript中的函数不返回任何内容,为什么?

为什么这个函数返回 0 而不是随机数

为什么这个函数总是返回 0

为什么在“返回 0”后调用析构函数?

为什么这个总工资函数返回 0?

如果 .index 方法的项为 0,为什么 python 返回索引 0?

如果 Varchar 超过 999,则算术溢出错误,为什么?

C 中的 Pow 函数返回 0

为什么我的 pow 函数在作为变量调用时返回 0?