亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果 y 超過 64,為什么 pow 函數返回 0?

如果 y 超過 64,為什么 pow 函數返回 0?

Go
一只斗牛犬 2022-01-10 16:49:19
如果 y 大于 64,為什么 pow 的結果為零?package mainimport (    "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 還是很陌生。)
查看完整描述

1 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

你的戰俘不應該基于什么是 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。


查看完整回答
反對 回復 2022-01-10
  • 1 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號