Javascript 种子随机数

Javascript 种子随机数,javascript,math,random,random-seed,Javascript,Math,Random,Random Seed,我一直在想一段时间了。有没有一种好的(快速的)方法可以让一个数字在播种的时候变得随机? 有没有一个好的算法将一个数字转换成一个看似随机的数字 一个小例子: specialrand(1) = 8 specialrand(2) = 5 specialrand(3) = 2 specialrand(4) = 5 specialrand(5) = 1 specialrand(1) = 8 specialrand(4) = 5 specialrand(1) = 8 如果输出也能是巨大的数字,那就太好了

我一直在想一段时间了。有没有一种好的(快速的)方法可以让一个数字在播种的时候变得随机? 有没有一个好的算法将一个数字转换成一个看似随机的数字

一个小例子:

specialrand(1) = 8
specialrand(2) = 5
specialrand(3) = 2
specialrand(4) = 5
specialrand(5) = 1
specialrand(1) = 8
specialrand(4) = 5
specialrand(1) = 8
如果输出也能是巨大的数字,那就太好了

需要注意的是:我不想填充数组并随机化数字,因为我希望能够为它提供巨大的数字差异,因为每当我重新启动程序时,我都希望得到相同的输出,这可能正是您想要的

例如,

uint32\u t xor128(无效){
静态uint32_t x=123456789;
静态uint32_t y=362436069;
静态uint32_t z=521288629;
静态uint32_t w=88675123;
uint32_t;
t=x^(x>19)^(t^(t>>8));
}
您可以创建如下内容:

  • 吃一粒种子
  • specialrand(5)是从该种子中获取第五个随机数的函数
  • 或specialrand(5)是一个函数,它从种子+5中获取第一个随机数

也许这就足够了。

你不是在寻找一个种子随机数。相反,我认为您正在寻找的是一个散列函数。如果你输入相同的输入,得到相同的输出,这不是随机的

如果您希望为一次运行生成一个随机数序列,但在一次运行到另一次运行时生成相同的序列,则可以使用随机数生成器,在给定相同种子值的情况下生成相同的序列


这就是最基本的pRNG的工作原理。还有更多加密安全的RNG,但是您的标准Math.rand()应该可以满足您的需要。

尝试设置一个键或一组键,然后编写一个带有等式的函数,以基于该键返回一个新数字:

一个非常基本的例子是:

function specialrand(value) {
key = array (1,2,4,6,8);
  for (k in key) {
      if (k%2 === 0) {
      value -= key[k] * value;
      } else {
      value += key[k] / value;
      }
  }
 return value;
}

但是,您可以创建一个高度复杂的方程式来生成“随机”数字,并确保每次返回相同的数字。

您可以使用日期功能

Math.valueOfSeed = function(n)
    {
        return Number(new Date(n%9999, n%12, n%30, n%24, n%60, n%60, n%1000));
    };

alert(Math.valueOfSeed(1) + " = " + Math.valueOfSeed(1));
alert(Math.valueOfSeed(2) + " = " + Math.valueOfSeed(2));
alert(Math.valueOfSeed(15) + " = " + Math.valueOfSeed(15));
alert(Math.valueOfSeed(5555) + " = " + Math.valueOfSeed(5555));
alert(Math.valueOfSeed(21212121) + " = " + Math.valueOfSeed(21212121));
alert(Math.valueOfSeed(6554654654) + " = " + Math.valueOfSeed(6554654654));​ 

测试是

如果您希望在重新启动程序时获得相同的输出,则它不是随机的…可能重复:我读了您的问题好几次,我无法理解它。它必须看起来是随机的,而不是真正的随机。您不是在寻找种子随机数。相反,我认为您正在寻找的是一个散列函数。如果你输入相同的输入,得到相同的输出,这不是随机的。
Math.valueOfSeed = function(n)
    {
        return Number(new Date(n%9999, n%12, n%30, n%24, n%60, n%60, n%1000));
    };

alert(Math.valueOfSeed(1) + " = " + Math.valueOfSeed(1));
alert(Math.valueOfSeed(2) + " = " + Math.valueOfSeed(2));
alert(Math.valueOfSeed(15) + " = " + Math.valueOfSeed(15));
alert(Math.valueOfSeed(5555) + " = " + Math.valueOfSeed(5555));
alert(Math.valueOfSeed(21212121) + " = " + Math.valueOfSeed(21212121));
alert(Math.valueOfSeed(6554654654) + " = " + Math.valueOfSeed(6554654654));​