gpt4 book ai didi

algorithm - 从随机位生成随机数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:00:11 25 4
gpt4 key购买 nike

所以我有一个给我随机位 rand(0,1) 的函数,我想将其概括为 rand(a,b),它给我一个在 a 到 b 范围内的随机数。

我的想法是只计算 b - a 中的位数,然后将它们附加在一起。我认为这会奏效,但不会统一。我觉得它会支持更大的数字而不是更小的数字(更接近 a 的数字)。并不是真的要求一个直接的答案只是一些帮助会很好。

编辑:到目前为止,这是我的想法,只是不确定统一部分

    pseudo code:
function rand_range(a, b):
n = b - a
sum = a
for i in range(n):
sum += rand(0,1)

return sum

最佳答案

是的,它不会是统一的。

考虑 3 位的简单情况:

0+0+0  0
0+0+1 1
0+1+0 1
0+1+1 2
1+0+0 1
1+0+1 2
1+1+0 2
1+1+1 3

很明显,1 和 2 比 0 或 3 更有可能出现。

随着位数的增加,这会变得更加不均匀 - 0 并且最大值永远不会出现超过一次,中间的出现次数最多。


对于随机分布,我能想到的最好办法是丢弃一些生成的数字。

b-a 舍入到最接近的 2 减 1 的幂,然后单独生成每个位,如果结果大于 b-a,请重试。

因此,如果 b-a 为 5,则四舍五入为 7,并生成涉及的 3 位以使最大数为 7:

000  0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

现在,如果是 6 或 7,就把它们扔掉再试。

这可以通过使用字符串并连接 0 或 1,并在末尾转换为数字,或者在每一步乘以 2(将所有位向左移动一位)和添加 0 或 1。

最后,您仍会将结果添加到a

关于algorithm - 从随机位生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22137985/

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