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 结果是随机结构在网格内合并。高正值的分组将影响附近的单元格,并导致它们向上倾斜,

该程序应执行以下操作:

  • 初始化值网格,“ActualGridValues”(X行X列)等于0
  • 创建另一个值网格“RandomGridValues”(X行X列),将网格中的每个单元格定义为等于-Z到Z范围内N个随机数的平均值
  • 将RandomGridValues中的数字添加到ActualGridValues中相应的单元格中
  • 对于ActualGridValues中的每个单元格,它还会添加相邻单元格的值
  • 无限重复步骤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;
             }
         }
     }  
    
    //对于每个单元格值,此函数生成一个介于-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位小数的精度。我会试试这个,看看它是否能修复它。