Erlang:关于分布,是否有更优雅的方法来获取特定范围内的随机整数

Erlang: Is there a more elegant way to get a random integer in a specific range, regarding the distribution

我的方法如下:

Num 1 和 Num 2 给出了范围的开始和结束的数字, 生成的随机整数可以是 num 1 或 num 2.

Num1 + rand:uniform(Num2-Num1).

示例:

数字 1 = 3 数字 2 = 20

rand:uniform returns 一个介于 1 和 17 之间的值。然后我再次添加 Num 1, 所以随机值在给定范围内。

我发现这个实现的问题是随机数的分布, 因为范围内最小的数字有更高的概率,这取决于 0 和 num 1 之间的距离以及 num 1 和 num 2 之间的范围。

我希望有一个更简单、更优雅的均匀分布整数的解决方案...

因为 rand:uniform(17) returns 一个介于 1 和 17 之间的数字,加上 3 将得到一个介于 4 和 20 之间的数字。试试这个:

rand:uniform(Num2 - Num1 + 1) + Num1 - 1

如果 Num1 是 3 而 Num2 是 20,那将变成 rand:uniform(18) + 2,给出一个介于 3 和 20 之间的随机数。