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

我的方法如下:

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

Num1 + rand:uniform(Num2-Num1).

例子:

数字 1 = 3 数字 2 = 20

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

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

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

回答

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

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

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

  • The documentation states that the return value is uniformly distributed, so if it's not, it's probably worth submitting a bug report. Are you using Erlang/OTP 22 or newer? The default algorithm [was changed](https://github.com/erlang/otp/pull/1969) in that release.

以上是Erlang:关于分布,是否有更优雅的方法来获取特定范围内的随机整数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>