gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:23:12 26 4
gpt4 key购买 nike

如果 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)
}

我刚刚意识到这是因为它在 base 2 中。您对此有何看法? (我对编程和 golang 还是个新手。)

最佳答案

你的 pow 不应该基于 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。

关于go - 如果 y 超过 64,为什么 pow 函数返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37265376/

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