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 之间的随机数。
我的方法如下:
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 之间的随机数。