为什么rand()没有给我一个随机的数字序列?

时间:2016-06-24 14:52:31

标签: c++ random seeding

我正在尝试使用SDL库制作俄罗斯方块游戏。当一个新的形状出现时,我希望它是随机的,所以我试图制作一个函数,它取一个0到4之间的随机数,后来用于决定出现的形状。这是迄今为止的功能:

int EventHandler::setShapeType() {

    if (m_seeded == false) {
        srand(time(NULL) * SDL_GetTicks()); //SDL_GetTicks returns the number of miliseconds since the SDL_library was initialized
        m_seeded = true;
    }

    int shapeType = (int) (((double) rand()/RAND_MAX) * 4.999);

    cout << shapeType << endl;

    return shapeType;
}

m_seededEventHandler中的方法变量,在构造函数中设置为false,因此第一个if语句只运行一次。

正如你所看到的那样,函数还没有完成,而且shapeType的打印只是用于调试目的,但到目前为止它至少应该能够生成一个随机数...它看起来并不像去做。在我的主函数中,我创建了一个10000迭代循环,其中计算了返回0到4之间的每个数字的频率,然后将最终结果打印出相对于最大迭代次数的百分比。结果如下:

  • 零:29.8
  • One:23.9
  • 二:19.2
  • 三:14.7
  • 四:12.4

现在,我认为在10000次迭代中,每个数字会出现大约相同的次数,但它们不会!差异很小,这是我每次都得到的结果。我知道rand()实际上只是从预制列表中获取数字,并且&#34;随机性&#34;来自你使用的种子,但是我得到的结果比我得到的结果多得多?好吧,我迷失了,我在这方面得到了一些帮助。

0 个答案:

没有答案