K.I.S.S.Random Genrator/ “保持简单”随机数发生器
2008-02-11 23:09
393 查看
(假)随机数发生器是Monte Carlo算法的基础,自然大家格外关注。
近几年,日本某君发明的Mersenne Twister[Makoto Matsumoto]可谓其中翘楚。
不过,它并非尽善尽美。一则它不适合用于数据加密,二则不能通过一些统计检验。
三嘛就是源程序比较长,不是一眼就能看明白的。
反过来,上世纪90年代后期就被Marsaglia[Marsaglia]发明出来的Keep-It-Simple-And-Stupid
算法却挺有趣而简短,而且能打通DIEHARD的各种检验[DIEHARD]。
下面是源代码:
unsigned int x = 123456789,
y = 362436000,
z = 521288629,
c = 7654321; /* Seed variables */
unsigned int KISS()
{
unsigned long long t, A = 698769069ULL;
x = 69069*x+12345;
y ^= (y<<13); y ^= (y>>17); y ^= (y<<5);
t = (A*z + c);
c = (t >> 32);
z = t;
return x+y+z;
}
居然就只是把“线性同余”,“移位轮转”和“带记忆乘法”这3种基本的随机数发生法一起用,
便获得很好的效果。的确够巧的,从这一点上说,比Mersenne Twister要有趣多了。
而且通过它,我们一次就学会3种随机数发生法。抽出其中任何1种,都可以单独使用,仿佛一把瑞士军刀。
[Makoto Matsumoto]Mersenne Twister Home Page
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
[Marsaglia]George_Marsaglia Wiki Page
en.wikipedia.org/wiki/George_Marsaglia
[DIEHARD]The Marsaglia Random Number CDROM
http://stat.fsu.edu/pub/diehard/
近几年,日本某君发明的Mersenne Twister[Makoto Matsumoto]可谓其中翘楚。
不过,它并非尽善尽美。一则它不适合用于数据加密,二则不能通过一些统计检验。
三嘛就是源程序比较长,不是一眼就能看明白的。
反过来,上世纪90年代后期就被Marsaglia[Marsaglia]发明出来的Keep-It-Simple-And-Stupid
算法却挺有趣而简短,而且能打通DIEHARD的各种检验[DIEHARD]。
下面是源代码:
unsigned int x = 123456789,
y = 362436000,
z = 521288629,
c = 7654321; /* Seed variables */
unsigned int KISS()
{
unsigned long long t, A = 698769069ULL;
x = 69069*x+12345;
y ^= (y<<13); y ^= (y>>17); y ^= (y<<5);
t = (A*z + c);
c = (t >> 32);
z = t;
return x+y+z;
}
居然就只是把“线性同余”,“移位轮转”和“带记忆乘法”这3种基本的随机数发生法一起用,
便获得很好的效果。的确够巧的,从这一点上说,比Mersenne Twister要有趣多了。
而且通过它,我们一次就学会3种随机数发生法。抽出其中任何1种,都可以单独使用,仿佛一把瑞士军刀。
[Makoto Matsumoto]Mersenne Twister Home Page
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
[Marsaglia]George_Marsaglia Wiki Page
en.wikipedia.org/wiki/George_Marsaglia
[DIEHARD]The Marsaglia Random Number CDROM
http://stat.fsu.edu/pub/diehard/
相关文章推荐
- [Z]K.I.S.S.Random Genrator “保持简单”随机数发生器
- 简单安全的用cookie保持登录状态
- 保持简单:Uber流处理架构演进的四字箴言 | 附124页PPT下载
- python写红包的原理流程包含random,lambda其中的使用和见简单介绍
- 保持python程序后台运行的简单方法
- Python实现简单生成验证码功能【基于random模块】
- Python实现一些简单的算法(2)—计算余数与random模块的使用
- 保持简单----纪念丹尼斯•里奇(Dennis Ritchie)
- java 基础 简单正则表达式使用规则、Math类、Random类、System类、BigInteger类、BigDecimal类、Date类、SimpleDateFormat类、Calendar类
- 保持简单苹果发展早期的设计理念
- 超简单练手题--保持手感
- 简单方法使页面回发后保持焦点
- 建立DICOM数据集,并将其保持到文件的简单示例代码
- 保持简单----纪念丹尼斯•里奇(Dennis Ritchie
- Random rand = new Random(47);的简单解释
- Java的RandomAccessFile随机文件读写的简单使用
- 简单常用类:Math 、Random、System、Integer、Character、BigInteger、BigDecimal等
- KISS保持简单:纪念丹尼斯·里奇
- Random的简单用法
- 如何避免被颠覆掉的命运?保持你产品的简单