Saber 酱的抱枕

Fly me to the moon

09/2
2015
学习

对js随机数的实验

var result=[0,0,0,0,0,0,0,0,0,0];
for (var i = 0; i < 1000000; i++) { var num=Math.floor(Math.random()*10); switch(num){ case 0: result[0]+=1; break; case 1: result[1]+=1; break; case 2: result[2]+=1; break; case 3: result[3]+=1; break; case 4: result[4]+=1; break; case 5: result[5]+=1; break; case 6: result[6]+=1; break; case 7: result[7]+=1; break; case 8: result[8]+=1; break; case 9: result[9]+=1; break; } }; var resultstring=""; for (var i = 0; i < result.length; i++) { resultstring+=i+"-"+(i+1)+"有"+result[i]+"次"+"\n"; }; alert(resultstring);[/code] 10亿次测试的一次结果:

我不得不承认这是闲的蛋疼。做这个东西的起因还是在本站。本站设置了十来张背景图,但有时候刷新几次都只反复出现某几张图。于是我做了上面的测试功能,来验证一下(虽然早知道注定失败)。后来我测试过随机10亿次,但即便测试基数这么高,最高和最低的结果之间也最少相差两万左右。上图可能较为极端,差别是39420。看来在随机里面追求公平真是脑子有病。

对js随机数的实验

  1. locationiskey
    Internet Explorer 11.0Internet Explorer 11.0Windows 7Windows 7

    我不清楚js随机数的实现算法

    然而伪随机数生成算法是个很大的课题(利用算法生成的都是伪随机,你应该知道……)
    当然传说中intel在硬件上有实现真随机,我是不太清楚……

    利用算法都是使用某个长周期函数进行的,也就是测试基数足够大时会出现循环
    所以应当依照使用范围选取适当的随机算法函数

    对随机算法的评价也很多……最简单的就是描点看是不是均匀……以前我也做过……

    现行做计算物理时可能会用到的某个算法叫做梅森旋转算法,周期多长忘了…………

    回复