生活的天平本不平衡,只有通过努力改变其偏向。

VC产生足够随机的随机数

2008-07-20

随机数在游戏开方面很有用,可惜MS直接提供的Rand,产生随机数不够随机,特别在循环中连续生成,如果以时间作为随机种的话,就显得格外的不随机。
我找到一款开源的产生随机数的库,可以产生整型和浮点随机数,速度还不错。而且作者制作了一个Lib库,经过汇编优化过的,效率比源码的要好。由于原作者发布的代码没有工程文件(老外很多代码没有工程,可能兼容不同平台吧),我建了一个工程,供各位VCFans测试。

如果想了解源码方面的资料,可以访问原作者的网站:http://www.agner.org/random/

  RandomDemo (92.5 KiB, 651 hits)

作者:lonkil | 分类目录:编程开发 | 标签:

4 条评论

  1. shine 说道:

    嗯,很好,谢谢

  2. biweilun 说道:

    分析得很好

  3. shine 说道:

    HI,你好,经常关注你的网站,内容很不错
    最近你又改动网站拉 ^_^

    最近忽然有个问题有点迷惑,还望帮我解释下,谢谢
    比如有一个自定义的class 名字为myclass
    我可以这样定义指针:
    myclass *mycls;
    但是还有一种是用new
    比如
    myclass *mycls=new myclass;
    我想问 这两种方式有什么区别?
    直接定义myclass *mycls;不一样吗?
    反而使用new还要麻烦delete它

    • lonkil 说道:

      首先感谢你对本站的支持。
      关于你的问题,我作简要的回答吧。
      其实你第一种和第二种用法是一样的,如果直接采用myclass *mycls的是不能直接使用的。这样仅仅是分配了一个指针,但并没有指向任何内容。
      而将myclass *mycls=new myclass就在堆上申请一块空间,并且调用了myclass类的构造函数,也就说能通过这句话,你的这个myclass类的对象已经实实在在的存在了。
      而第一种情况,仅仅在栈上建立了一个指针,对象还没有产生(没有调用类的构造函数)。如果直接使用的话,是错误的。

      产生这个错误的原因是由于你所使用的开发包已帮你创建了对象,而你误以为你自己创建了。
      比如:CDC *PDC; pDC = GetDC(this);然后就可以直接使用pDC了,你并没有New什么,其实在GetDC中系统已经帮你产生了DC对象。正因为如此所以你在用完之后要用DeleteDC,否则就会产生资源泄漏。

      这样解释不知道你是否能明白我的意思,对照一些C++的书箱和教程,就会很快明白了,如果有什么不明白的地方可以给我写邮件,我的邮件地址在站内可以查到。感谢你的光临。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>