javascript – 为什么这些随机数慢慢倾向于负值?

该程序应该执行以下操作:

>初始化值网格“ActualGridValues”(X行乘Y列)等于0.
>创建另一个值网格“RandomGridValues”(X列乘Y列),将网格中的每个单元格定义为等于-Z到Z范围之间的N个随机数的平均值.
>将RandomGridValues中的数字添加到ActualGridValues中的相应单元格.
>对于ActualGridValues中的每个单元格,它还会添加相邻单元格的值.
>无限制地重复步骤2-4.

结果是随机结构在网格内合并.高正值的分组将影响附近的细胞并导致它们倾斜高,低负值的分组将做同样但倾斜低.

所有单元格中所有值的总和应该为零.虽然存在高度偏斜和低偏斜数的局部组,但是在足够大的样本大小上,所有单元的总数应为零.

问题是,在1000次迭代之后,这些值始终偏向负值.你有结构和locallized高点和低点,但总值偏差负. (这意味着随着时间的推移,整个网格只会被负数填充).

每次运行模拟时,值都会偏差.有什么想法吗?

编辑:我已将问题分离到以下功能. RandomGridValue中所有数字的平均值几乎总是为负值.

//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;
         }
     }
 }  

最佳答案 由于Javascript实现的浮点标准,使用十进制值进行算术是错误的,至少可以说……

一种解决方法是通过乘以100将小数转换为整数,然后将数学除以100.

这只适用于最多2个小数位的情况.如果你需要更高的精度,我建议使用除Javascript之外的其他语言.

点赞