4

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

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

结果是随机结构在网格内合并。高正值的分组会影响附近的单元格并导致它们偏高,而低负值的分组也会这样做但偏低。

所有单元格中所有值的和积应该为零。尽管存在高偏斜和低偏斜数字的局部组,但在足够大的样本量下,所有单元格的总数应该为零。

问题是,在说 1000 次迭代之后,这些值始终是负的。你有结构和本地化的高点和低点,但总值总是偏向负数。(这意味着随着时间的推移,整个网格变得只有负数)。

每次运行模拟时,这些值都会出现负偏斜。关于为什么的任何想法?

编辑:我已将问题隔离到以下功能。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;
         }
     }
 }  
4

1 回答 1

2

由于 Javascript 实现的浮点标准,用十进制值进行算术运算至少可以说是错误的......

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

仅当您最多有 2 个小数位时,这才有效。如果您需要比这更高的精度,我会推荐 Javascript 以外的语言用于该部分。

于 2013-03-12T18:16:43.450 回答