Random 抽奖(随机数生成)

Random 抽奖(随机数生成),random,numbers,generator,Random,Numbers,Generator,我需要一个软件或程序环境,用于幸运抽奖,具有以下功能: 完全随机选择法 不使用确定的种子和增量(不可预测的方式) 不依赖于第一选择 可以根据环境因素(如时间、温度、互联网流量、大气噪音)生成随机数,但不能从简单的随机数学函数生成 你能帮我一下吗 多亏了有一种计算生成随机数的方法,乔治·马萨格里亚(George Marsaglia)称之为带进位乘法法。这种方法的优点是它不是基于增量的,也不是在模式中播种的。相反,它有一个随机的种子 注意:此应用程序不是线程安全的 代码来自本文: m_w=;/

我需要一个软件或程序环境,用于幸运抽奖,具有以下功能:

  • 完全随机选择法

  • 不使用确定的种子和增量(不可预测的方式)

  • 不依赖于第一选择

  • 可以根据环境因素(如时间、温度、互联网流量、大气噪音)生成随机数,但不能从简单的随机数学函数生成

你能帮我一下吗


多亏了

有一种计算生成随机数的方法,乔治·马萨格里亚(George Marsaglia)称之为带进位乘法法。这种方法的优点是它不是基于增量的,也不是在模式中播种的。相反,它有一个随机的种子

注意:此应用程序不是线程安全的

代码来自本文:

m_w=;/*不能为零*/
m_z=;/*不能为零*/
你不能得到随机数
{
m_z=36969*(m_z&65535)+(m_z>>16);
m_w=18000*(m_w&65535)+(m_w>>16);

return(m_z有一种通过计算生成随机数的方法,George Marsaglia称之为带进位的乘法方法。这种方法的优点是它不基于增量,也不以模式为种子。相反,它有一个随机种子

注意:此应用程序不是线程安全的

代码来自本文:

m_w=;/*不能为零*/
m_z=;/*不能为零*/
你不能得到随机数
{
m_z=36969*(m_z&65535)+(m_z>>16);
m_w=18000*(m_w&65535)+(m_w>>16);

返回(m_z如果“幸运抽奖”的意思是你每天只需要一次数字,那么你可以使用可公开访问的股票市场指数(如纳斯达克指数或标准普尔500指数)的低位,包括小数。你也可以使用这些指数中的几个,并使用散列函数将数字混合,得到一个更大的数字。

“幸运抽奖"你的意思是,你每天只需要一个数字,大约一次,你可以使用可公开访问的股票市场指数(如纳斯达克指数或标准普尔500指数)的低位,包括小数位数。你也可以使用其中的几个指数,并使用散列函数混合这些数字,得到一个更大的数字。

你尝试过什么?有很多信息在这里的PRNG和更广泛的互联网上。也许在寻找硬件RNG?那么你是说你想要一个不使用种子的随机数生成器,但种子中有时间等因素?你需要多久生成一次数字?一天一次就够了吗?你可能会发现加密RNG比普通RNG更符合你的标准。你有过吗看看你的语言提供给加密使用的任何东西,或者实现Yarrow、Fortuna或类似的东西。你尝试过什么?这里和更广泛的互联网上有很多关于PRNG的信息。也许在寻找硬件RNG?那么你是说你想要一个随机数生成器,它不使用种子,但带有时间等因素?如何您经常需要生成数字吗?一天一次就足够了吗?您可能会发现加密RNG比普通RNG更符合您的标准。请查看您的语言提供的用于加密的内容,或者实现Yarrow、Fortuna或类似的功能。
m_w = <choose-initializer>;    /* must not be zero */
m_z = <choose-initializer>;    /* must not be zero */

uint get_random()
{
    m_z = 36969 * (m_z & 65535) + (m_z >> 16);
    m_w = 18000 * (m_w & 65535) + (m_w >> 16);
    return (m_z << 16) + m_w;  /* 32-bit result */
}