Javascript 没有random()的类random()函数

Javascript 没有random()的类random()函数,javascript,Javascript,我是否可以从头开始编写一个JavaScript函数,其行为类似于Math.random (我的意思是不使用Math.random)是的,您可以实现自己的号码生成器,但正如Sarnold提到的,您需要在通话之间保持状态。是的,您可以实现自己的号码生成器,但是正如Sarnold提到的,您需要在调用之间保持状态。当我需要一些随机性,但懒得查找语法时,我通常做的是实现(离散混沌系统)。在伪代码中,如下所示: var x = 0.234; // or some other number betwe

我是否可以从头开始编写一个JavaScript函数,其行为类似于
Math.random


(我的意思是不使用
Math.random

是的,您可以实现自己的号码生成器,但正如Sarnold提到的,您需要在通话之间保持状态。

是的,您可以实现自己的号码生成器,但是正如Sarnold提到的,您需要在调用之间保持状态。

当我需要一些随机性,但懒得查找语法时,我通常做的是实现(离散混沌系统)。在伪代码中,如下所示:

var x = 0.234;     // or some other number between 0 and 1 ( but not 0.5 )
for (var n=1; n<=100;n++){
   x = 4 * x * (1-x);   // this is the iteration
   console.log(x);
}
var x=0.234;//或介于0和1之间的其他数字(但不是0.5)

对于(var n=1;n当我需要一些随机性但懒得查找语法时,我通常做的是实现(离散混沌系统)。在伪代码中,这是这样的:

var x = 0.234;     // or some other number between 0 and 1 ( but not 0.5 )
for (var n=1; n<=100;n++){
   x = 4 * x * (1-x);   // this is the iteration
   console.log(x);
}
var x=0.234;//或介于0和1之间的其他数字(但不是0.5)

对于(var n=1;nPer@OscarGomez关于a的回答,这里有一个作为普通JavaScript函数的随机数生成器的示例。当然,它的“随机性”(目前由于周期短而非常差)质量似乎取决于为封闭对象“o”中的常数选择好的值

var random=(函数(){
VarO={mod:13,mul:11inc:7,x:0};
返回函数(){
返回o.x=(o.mul*o.x+o.inc)%o.mod
}
})();
random();//=>7
random();//=>6
random();//=>8
random();//=>4
下面是一个更便携的版本,它可以有单独的生成器实例和种子:

随机函数{
this.seed=s | | 0;
这个mod=13;
这个.mul=11;
本公司=7;
this.x=this.seed;
}
Random.prototype.next=函数(){
返回(this.x=(this.mul*this.x+this.inc)%this.mod);
};
var r=新的随机变量(1);
r、 next();//=>5
r、 next();//=>10
r、 next();//=>7

根据@OscarGomez关于a的回答,这里有一个随机数生成器作为普通JavaScript函数的示例。当然,它的“随机性”(目前由于周期短而非常差)的质量似乎取决于为封闭对象“o”中的常数选取好的值

var random=(函数(){
VarO={mod:13,mul:11inc:7,x:0};
返回函数(){
返回o.x=(o.mul*o.x+o.inc)%o.mod
}
})();
random();//=>7
random();//=>6
random();//=>8
random();//=>4
下面是一个更便携的版本,它可以有单独的生成器实例和种子:

随机函数{
this.seed=s | | 0;
这个mod=13;
这个.mul=11;
本公司=7;
this.x=this.seed;
}
Random.prototype.next=函数(){
返回(this.x=(this.mul*this.x+this.inc)%this.mod);
};
var r=新的随机变量(1);
r、 next();//=>5
r、 next();//=>10
r、 next();//=>7

每种合理的方法都需要在调用之间保持状态——在对象中或通过全局变量。您是否拥有客户端将重复使用的对象或访问在调用之间持续存在的全局变量?否。
Math.random
是否保持状态?直到您对生成随机数有了深入的理解。。。特别是当你打算进行加密时。@sarnold:但由于JavaScript中的闭包,你可以在一个普通的旧函数中维护状态,因此不需要单独的对象或全局变量。(当然,除非你想要具有单独种子和/或状态的单独生成器。)@Maerics:太棒了!我不知道JavaScript有那么好。:)每种合理的方法都需要在调用之间保持状态——无论是在对象中还是通过全局变量。您是否拥有客户端将重复使用的对象或访问在调用之间持续存在的全局变量?否。
Math.random
是否保持状态?除非您对生成随机数有了深入的了解……特别是sarnold:但由于JavaScript中的闭包,您可以在一个普通的旧函数中维护状态,因此不需要单独的对象或全局变量。(当然,除非您需要具有单独种子和/或状态的单独生成器。)@Maerics:太棒了!我不知道JavaScript有那么好。:)
Math.random
是否以某种方式保持状态?@Randomblue我不确定Math.random是否保持状态,但LCG算法使用上一个值来生成下一个值。如果不保持状态(或递归,换句话说),就不可能生成随机性。事实上,所有随机数生成器都是高度混沌的,因此是确定性过程。
Math.random
是否以某种方式保持状态?@Randomblue我不确定Math.random是否保持状态,但LCG算法使用前一个值生成下一个值。不保持状态(或者换句话说,递归)不可能产生随机性。事实上,所有随机数生成器都是高度混沌的,因此具有确定性。我可以安全地始终使用毫秒时间作为种子
seed=new Date().getTime(),否则会影响随机性?我可以安全地始终使用毫秒时间作为种子
seed=new Date().getTime(),否则会影响随机性?