Nic*_*cue 15
如果你想要一个(伪)均匀分布(均匀间隔)在0.9和1.1之间,那么下面的代码将起作用:
range = 0.2
return 1-range/2+rand(100)*range/100
Run Code Online (Sandbox Code Playgroud)
相应地调整范围.
如果你想要一个正态分布(钟形曲线),你需要特殊的代码,这将是语言/库特定的.您可以使用此代码近似得到:
sd = 0.1
mean = 1
count = 10
sum = 0
for(int i=1; i<count; i++)
sum=sum+(rand(100)-50)
}
normal = sum / count
normal = normal*sd + mean
Run Code Online (Sandbox Code Playgroud)
一般来说,要获得一个范围内的随机数,你没有得到之间的数字0和100,你会得到之间的数字0和1.然而,这是无关紧要的,因为你可以简单地通过除以#得到0- 1数字100- 所以我不会说明这一点.
在考虑这个伪代码,你需要考虑的一些0和1你获得的该比例.换句话说,如果我在a和之间有一个任意范围b,那么两个端点之间的百分比是我随机选择的点.(因此,和之间的距离0.52均值52%的随机结果)ab
考虑到这一点,请以这种方式考虑问题:
设置范围的起点和终点.
var min = 0.9;
var max = 1.1;
获取0和之间的随机数1
var random = Math.random();
获取起点和终点范围点之间的差异(b- a)
var range = max - min;
将您的随机数乘以差值
var adjustment = range * random;
加上最小值.
var result = min + adjustment;
并且,您可以按顺序理解每个步骤的值:
var min = 0.9;
var max = 1.1;
var random = Math.random(); // random == 0.52796 (for example)
var range = max - min; // range == 0.2
var adjustment = range * random; // adjustment == 0.105592
var result = min + adjustment; // result == 1.005592
Run Code Online (Sandbox Code Playgroud)
请注意,结果保证在您的范围内.最小随机值是0,最大随机值是1.在这两种情况下,会发生以下情况:
var min = 0.9;
var max = 1.1;
var random = Math.random(); // random == 0.0 (minimum)
var range = max - min; // range == 0.2
var adjustment = range * random; // adjustment == 0.0
var result = min + adjustment; // result == 0.9 (the range minimum)
var min = 0.9;
var max = 1.1;
var random = Math.random(); // random == 1.0 (maximum)
var range = max - min; // range == 0.2
var adjustment = range * random; // adjustment == 0.2
var result = min + adjustment; // result == 1.1 (the range maximum)
Run Code Online (Sandbox Code Playgroud)