1

我必须使用 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

是我下载的算法。

我错过了什么吗?

4

1 回答 1

3

这是因为您正在使用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参数。

于 2015-02-27T13:46:01.557 回答