我需要具有以下功能的幸运抽奖软件或程序环境:
完全随机选择法
不使用明确的种子和增量(不可预测的方式)
不依赖于第一个选择
随机数可以根据时间、温度、互联网流量、大气噪声等环境因素生成,但不能根据简单的随机数学函数生成。
你能帮我解决这个问题吗?
谢谢
有一种方法可以计算生成随机数,它被 George Marsaglia 称为带进位乘法。这种方法的优点是它不是基于增量的,也不是在模式中播种的。相反,它有一个随机种子。
PS这个应用程序不是线程安全的
http://en.wikipedia.org/wiki/Multiply-with-carry
代码来自这篇文章:http ://en.wikipedia.org/wiki/Random_number_generation#Computational_methods
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 */
}
如果您所说的“幸运抽奖”是指您每天只需要一个数字,那么您可以使用可公开访问的股票市场指数(例如 NASDAQ 或 S&P 500)的低位数字,包括小数位。您可以还使用其中几个索引并使用哈希函数混合数字以获得单个更大的数字。