惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
IT之家
IT之家
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
C
Check Point Blog
T
Tailwind CSS Blog
博客园 - Franky
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
博客园 - 叶小钗
J
Java Code Geeks
腾讯CDC
罗磊的独立博客
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
Martin Fowler
Martin Fowler
酷 壳 – CoolShell
酷 壳 – CoolShell
I
InfoQ
B
Blog
V
Visual Studio Blog
F
Fortinet All Blogs

博客园 - asashina

绿色和平,你错了! 日本科学家一级棒! 新游戏就在我的后院里~~ 攒钱12000元,计划一下去莫斯科的旅游~~~ 应用层安全传输协议 hoho 俺也献了回爱心~~ Bloom Filter Report 好久没更新 大家新年好! 祝贺Phyllis Turner女士成为世界上最年长的硕士! 美国国旗里的“火箭” "红旗颂"的感情多么真挚,突然很理解老一代们:-) 嗯,祝贺自己的论文终于发表了。丑小鸭终于找到了鸭群~~~ XMLLite是什么? 最近把新同事培训的事情接了过来... 达尔文的眼睛---之软件工程 PlaceHolder 在听伏尔加纤夫曲 超酷 Susan Milan的音乐 剑道训练很有趣的一种手段
K.I.S.S.Random Genrator/ “保持简单”随机数发生器
asashina · 2008-02-11 · via 博客园 - asashina

(假)随机数发生器是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/