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

Pfi*_*nnn 1 random erlang distribution

我的方法如下:

Num 1 和 Num 2 被赋予范围的开始和结束的数字,产生的随机整数可以是 num 1 或 num 2。

Num1 + rand:uniform(Num2-Num1).
Run Code Online (Sandbox Code Playgroud)

例子:

数字 1 = 3 数字 2 = 20

rand:uniform 返回 1 到 17 之间的值。然后我再次添加 Num 1,因此随机值在给定范围内。

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

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

leg*_*cia 5

由于rand:uniform(17)返回一个介于 1 和 17 之间的数字,添加 3 将给出一个介于 4 和 20 之间的数字。试试这个:

rand:uniform(Num2 - Num1 + 1) + Num1 - 1
Run Code Online (Sandbox Code Playgroud)

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

  • 文档指出返回值是均匀分布的,因此如果不是均匀分布的,则可能值得提交错误报告。您使用的是 Erlang/OTP 22 或更新版本吗?该版本中的默认算法[已更改](https://github.com/erlang/otp/pull/1969)。 (2认同)