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随机数的实现算法
然而伪随机数生成算法是个很大的课题(利用算法生成的都是伪随机,你应该知道……)
当然传说中intel在硬件上有实现真随机,我是不太清楚……
利用算法都是使用某个长周期函数进行的,也就是测试基数足够大时会出现循环
所以应当依照使用范围选取适当的随机算法函数
对随机算法的评价也很多……最简单的就是描点看是不是均匀……以前我也做过……
现行做计算物理时可能会用到的某个算法叫做梅森旋转算法,周期多长忘了…………