zoukankan      html  css  js  c++  java
  • [Z]K.I.S.S.Random Genrator “保持简单”随机数发生器

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

  • 相关阅读:
    webdav srs相关
    How To Configure WebDAV Access with Apache on Ubuntu 14.04
    ubuntu 编译lighttpd
    srs编译及推流测试
    Compile pciutils (lspci, setpci) in Windows x86,在 Windows x86 平台下编译 pciutils (lspci, setpci)
    mingw MSYS2 区别
    Qt之美(三):隐式共享
    Qt之美(二):元对象
    Qt之美(一):d指针/p指针详解
    C++的栈空间和堆空间
  • 原文地址:https://www.cnblogs.com/waytofall/p/2964509.html
Copyright © 2011-2022 走看看