MersenneTwister 重复数字
MersenneTwister repeated numbers
我必须使用 MersenneTwister 创建随机数字序列(我无法更改算法)。在前三次尝试后,对生成算法的不同调用总是给出相同的结果。
这是代码:
var getRandomArray=function(length){
var casuals=[];
var mersenneTwister = new MersenneTwister(new Date().getTime()/2); //A SEED TEST
while(casuals.length < length){
var vmt= mersenneTwister.random();
var newVal= Math.round( vmt*100);
if(casuals.indexOf(newVal)===-1)
casuals.push(newVal);
}
//casuals.sort(function(a,b){return a-b;});//NUMERIC SORT
return casuals;
};
var inputs1= getRandomArray(6);
var inputs2= getRandomArray(6);
//inputs1 AND inputs2 ARE ALWAYS THE SAME!
我尝试更换不同种类的种子,但没有任何改变。
我在这里创建了一个 fiddle.
Here我下载的算法
我是不是漏掉了什么?
因为您正在使用new Date().getTime()
。 twister 函数完成得非常快,两次连续调用 new Date().getTime()
给出相同的值,因此是相同的种子。
如果您添加不同的号码,例如例如:
它按预期工作。
变化是:
$scope.genRandom=function(){
$scope.inputs1= getRandomArray(6, 1);
$scope.inputs2= getRandomArray(6, 2);
};
和:
var getRandomArray=function(length, add){
var casuals=[];
var mersenneTwister = new MersenneTwister(new Date().getTime()/2 + add);
...
}
即添加 add
参数。
我必须使用 MersenneTwister 创建随机数字序列(我无法更改算法)。在前三次尝试后,对生成算法的不同调用总是给出相同的结果。 这是代码:
var getRandomArray=function(length){
var casuals=[];
var mersenneTwister = new MersenneTwister(new Date().getTime()/2); //A SEED TEST
while(casuals.length < length){
var vmt= mersenneTwister.random();
var newVal= Math.round( vmt*100);
if(casuals.indexOf(newVal)===-1)
casuals.push(newVal);
}
//casuals.sort(function(a,b){return a-b;});//NUMERIC SORT
return casuals;
};
var inputs1= getRandomArray(6);
var inputs2= getRandomArray(6);
//inputs1 AND inputs2 ARE ALWAYS THE SAME!
我尝试更换不同种类的种子,但没有任何改变。 我在这里创建了一个 fiddle.
Here我下载的算法
我是不是漏掉了什么?
因为您正在使用new Date().getTime()
。 twister 函数完成得非常快,两次连续调用 new Date().getTime()
给出相同的值,因此是相同的种子。
如果您添加不同的号码,例如例如:
它按预期工作。
变化是:
$scope.genRandom=function(){
$scope.inputs1= getRandomArray(6, 1);
$scope.inputs2= getRandomArray(6, 2);
};
和:
var getRandomArray=function(length, add){
var casuals=[];
var mersenneTwister = new MersenneTwister(new Date().getTime()/2 + add);
...
}
即添加 add
参数。