gpt4 book ai didi

go - 如何在 Go 中生成可变长度的随机数

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

我试图在 Go 中生成一个长度可变的随机整数,但我总是得到填充总长度的数字。这是我的代码:

package main

import (
"fmt"
"math/big"
"crypto/rand"
)

const ResultsPerPage = 30

var (
total = new(big.Int).SetBytes([]byte{
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B, 0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x40,
})
pages = new(big.Int).Div(total, big.NewInt(ResultsPerPage))
random *big.Int
err error
)

func main() {

fmt.Println(pages)
fmt.Println(randomString(pages))
}

func randomString(l *big.Int) string {
random, err = rand.Int(rand.Reader, l)
fmtrandom := fmt.Sprint(random)
return string(fmtrandom)
}

输出

3859736307910539847452366166956263595094585475969163479420172104717272049811
3479662380009045046388212253547512051795238437604387552617121977169155584415

代码示例:https://play.golang.org/p/HxAb6Rs_Uj

感谢任何帮助。谢谢你。

最佳答案

如果我没理解错的话,您遇到的问题是随机数似乎总是与最大允许值具有相同的位数,对吗?当我运行代码时,情况并非如此。这是我刚刚观察到的输出:

3859736307910539847452366166956263595094585475969163479420172104717272049811
65719900872761032562423535702578352960653752260368991759410130265294153783

在 Playground 上,我相信随机种子和时钟时间是固定的,所以你会反复看到相同的结果。但是在本地运行时,我看到了输出长度的预期变化。

更新

您可能想知道为什么您可以多次运行此代码并观察到随机数的长度经常接近最大值的长度。

一点数学就可以解释这一点。假设我们在 0 到 999 之间选择一个数字。该范围内的数字有多少:

  1. 3 位数? 900 (100-999)
  2. 2 位数? 90 (10-99)
  3. 1 位数? 10 (0-9)

同样,如果您的最大值很大,则大多数可以选择的数字将非常接近该最大长度。很少会看到比该长度短两位数的数字。 (您应该在 1% 的时间内看到它们。)

关于go - 如何在 Go 中生成可变长度的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44774514/

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