效率……
srand/rand我感觉已经非常不错了,做拼图的时候曾经用过,完全符合我的要求。如果让我在取随机图的时候还要连你的服务器取什么随机数……天那要多久?网络断了我是不是程序就不能用?

解决方案 »

  1.   

    真随机数需要硬件来实现,没有相关硬件,只能模拟,最多尽量提高随机程度,尽量使随机数分布均匀。
    计算一分钟通过的车辆数目的方法,速度太慢、分布极度不均匀,所以不实用。可以采用下面这个函数来获取CPU时间戳(开机到当前所经过的时钟周期数,因为任何指令执行都要消耗CPU时钟周期,而由于各种调度导致执行了多少周期不可测,所以可以看作一个超高速车辆法),以提高随机程度。
    __inline unsigned __int64 GetCpuCount()
    {
    __asm _emit 0x0F
    __asm _emit 0x31
    }
      

  2.   

    真伪随机数有两个说法,学术上认为程序出来都是伪随机数,只有自然办才能生成真随机数,但是工程上需要并不是真随机数,因为真随机数只有在数据是无穷个的情况下才能出现,所以工程中“反而”将程序第一次计算出来的随机数叫做 “真随机数”,而将这个真随机数进行打乱的结果叫做 “伪随机数”打乱的方法一般就用24字节的3des算法。
      

  3.   

    对于一组随机数,是否满足工程上的“伪随机数”要求,可以用nist的检测工具来检测。
      

  4.   

    使用CryptoAPI 用RSA RC4 的HASH能够产生比CRT的srand质量高得多的随机数(散得更均匀)。HCRYPTPROV hProv = NULL;  
    CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);  
    BYTE key[32]; // 这就是生成的随机数数组,长度任意。
    CryptGenRandom(hProv, sizeof(key), key);
    CryptReleaseContext(hProv, 0);
      

  5.   

    刚才看到的一篇论文:摘要:目的:构建基于Microsoft CryptoAPI的真随机数生成器.方法:在Intel 815E 芯片组的个人电脑上安装Intel Security Driver(ISD)后,使用Microsoft Visual C++ 6编程,通过CryptGenRandom函数获取真随机数.结果:生成的500个随机数通过了NIST FIPS 140-1和χ2拟合优度检验(α=0.05),表明本方法所生成的随机数满足独立性和分布均匀性的要求.生成7500个随机数经域值变换后与随机数表中的同等数目的随机数进行了统计学比较,结果显示前者的均值偏移、SD,SE和CV均小于后者.结论:基于CryptoAPI的真随机数生成器可以生成满足独立性和分布均匀性的真随机数.http://d.wanfangdata.com.cn/Periodical_dsjydxxb_4200419031.aspx