yが64より大きい場合、powの結果はどうしてですか?yが64を超えると、なぜpow関数が0を返しますか?
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になっていることがわかりました。これについてあなたはどう思いますか? (私はまだプログラミングとゴランで新しいです。)
'2^64'は' uint64'に収まりません。 (実際には基底2とは関係がありません。実際には、任意の基数で固定サイズの整数で起こりますが、「ランダムなオーバーフロー」ではなく完全な0になるという意味です。 – Thilo
コードにバグがあります。私の答えをチェックしてください。 – khrm
Thiloとkhrmの両方から正しい答えを得ました。しかし、あなたのコードはそこに到達することさえありません - 'y> 64 return 0'の条件があります。だから、y> 64 ... – MirekE