如何在不使用Math.random()函数的情况下使用JavaScript创建随机数生成器函数?

如何在不使用Math.random()函数的情况下使用JavaScript创建随机数生成器函数?,javascript,random,numbers,Javascript,Random,Numbers,我想使用JavaScript创建一个随机数生成器函数,该函数将返回0到1之间的随机数。是否可以在不使用Math.random()函数的情况下创建自定义随机数生成器函数 我试过这种方法。它是有效的,但我不知道它是真的随机的还是有任何模式 var lastRand=0.5; 函数rand(){ var x=new Date().getTime()*Math.PI*lastRand; var randNum=x%1; lastRand=randNum; 返回randNum; } //输出 对于(变量

我想使用JavaScript创建一个随机数生成器函数,该函数将返回0到1之间的随机数。是否可以在不使用
Math.random()
函数的情况下创建自定义随机数生成器函数

我试过这种方法。它是有效的,但我不知道它是真的随机的还是有任何模式

var lastRand=0.5;
函数rand(){
var x=new Date().getTime()*Math.PI*lastRand;
var randNum=x%1;
lastRand=randNum;
返回randNum;
}
//输出
对于(变量n=0;n<50;n++){
log(rand());

}
为什么不这样?对我来说,它似乎更随机,因为它不依赖于值

var lastRand,randNum;
函数rand(){
while(randNum==lastRand)
randNum=(new Date().getTime()*Math.PI)%1;
返回lastRand=randNum;
}
//输出
对于(变量n=0;n<50;n++)

log(rand())这是一个使用不需要外部变量的函数生成器的版本

function *makeRand() {
  let seed = new Date().getTime()
  while (true) {
    seed = seed * 16807 % 2147483647
    yield seed / 2147483647
  }
}

// Usage
let rand = makeRand()
for (let i = 0; i < 5; i++) {
  console.log(rand.next().value)
}

// 0.05930273982663767
// 0.7011482662992311
// 0.1989116911771296
// 0.10879361401721538
// 0.4942707873388523
函数*makeRand(){
让seed=new Date().getTime()
while(true){
种子=种子*16807%2147483647
种子产量/2147483647
}
}
//用法
设rand=makeRand()
for(设i=0;i<5;i++){
console.log(rand.next().value)
}
// 0.05930273982663767
// 0.7011482662992311
// 0.1989116911771296
// 0.10879361401721538
// 0.4942707873388523

来源:

我有一个更好的解决方案。它使用对象而不是外部变量

var随机={
“lastRand”:0.5,
“randNum”:0.5,
“rand”:函数(){
while(this.randNum==this.lastRand){
this.randNum=(new Date().getTime()*Math.PI*this.lastRand)%1;
}
返回this.lastRand=this.randNum;
}
}
对于(变量n=0;n<50;n++){
console.log(Random.rand());

}
您应该查看(取下外科口罩)但为什么?重新发布!在这里找到你的答案:我找到了这个,这可能会帮助你,这是一个很好的解决方案。但我注意到这种方法有一种模式。如果每1秒重新加载一次页面,就会发现这样的模式。0.22..., 0.24...., 0.26...., 0.28... 在第一个号码中。也许你一直在呼叫makeRand()?确保存储结果rand,并使用它多次调用next()。