Javascript 为什么这些随机数慢慢地趋向负值?
该程序应执行以下操作:Javascript 为什么这些随机数慢慢地趋向负值?,javascript,random,skew,chaos,Javascript,Random,Skew,Chaos,该程序应执行以下操作: 初始化值网格,“ActualGridValues”(X行X列)等于0 创建另一个值网格“RandomGridValues”(X行X列),将网格中的每个单元格定义为等于-Z到Z范围内N个随机数的平均值 将RandomGridValues中的数字添加到ActualGridValues中相应的单元格中 对于ActualGridValues中的每个单元格,它还会添加相邻单元格的值 无限重复步骤2-4 结果是随机结构在网格内合并。高正值的分组将影响附近的单元格,并导致它们向上倾斜,
//For every cell value, this function generates a string of random numbers between -RandMax/2 and +RandMax/2. It then takes the average of all of these numbers. It assigns that value to a cell in the RandomGridValue array.
function AddChaos() {
for (var l = 0; l < GridX; l++) {
for (var m = 0; m < GridY; m++) {
var RandomGrid = 0;
for (var n = 0; n < RandNums; n++) {
RandomGrid = RandomGrid + Math.random() * RandMax * 2 - RandMax;
}
RandomGridValue[l][m] = RandomGrid / RandNums;
}
}
}
//对于每个单元格值,此函数生成一个介于-RandMax/2和+RandMax/2之间的随机数字符串。然后取所有这些数字的平均值。它将该值指定给RandomGridValue数组中的单元格。
函数AddChaos(){
对于(var l=0;l
由于Javascript实现的浮点标准,使用十进制值进行算术至少可以说是错误的
一种解决方法是将小数乘以100,然后进行数学运算,再除以100,从而将小数转换为整数
只有当您最多有2位小数时,这才有效。如果您需要更高的精度,我建议您使用Javascript以外的语言。我发现这个问题很有趣,所以我粗略搜索了一下,发现了以下内容:。似乎乘以随机数可能会使结果产生偏差。我认为这是值得研究的。这篇文章是关于两个随机数相乘的,而在你的代码中,你只是在缩放它,所以我不确定它是否会有完全相同的效果。这是另一篇帖子:。这种歪斜正是这个程序想要捕捉的。但是,它应该使分布向两个端点倾斜,而不是向一个特定端点倾斜。如果要对[-RandMax,RandMax]中的#
RandNums
随机值求和,则需要执行此操作RandomGrid+=(Math.random()*RandMax-2*RandMax)代码>--否则,根据RandMax
@user2161457的符号,你要么得到所有的正值,要么得到所有的负值。我以为你是在试图消除结果的偏差。我提供了这些链接,这样你就可以看到是什么导致了倾斜,这样你就可以避免它了。@AaronBlenkush好吧,我正试图避免朝向一个标志的单向倾斜。应该发生的是双向倾斜,其中50%的值为“RandMax/2”,50%的值为“-RandMax/2”,平均值为0。发生的事情是,我们不断看到更多“-RandMax/2”好答案。我不需要超过2位小数的精度。我会试试这个,看看它是否能修复它。