为什么在循环中使用随机数时得到相同的结果?

时间:2014-07-01 20:53:51

标签: c++ loops random visual-studio-2013 windows-8.1

我可能是盲目的,我每次运行此控制台应用程序时都得到相同的结果,尽管使用了随机数字。任何人都可以解释我哪里出错了吗?这是代码:

#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <stdio.h>

using namespace std;

bool bacteria(long mut, long chance){
        bool result;
    if (mut >= chance){
         result = true;
    }
    else{
        result = false;
    }
    return result;
}
int run = 1000000;//Number of iterations
int mutations;
int survival;

void domutation(){
    mutations = 0;
    survival = 0;
    for (int i = 0; i < run; i++){
        long x = rand() % 2;
        long y = rand() % 1000000;
        bool run = bacteria(x, y);
        if (run == true){
            mutations++;
        }
        else if (run == false) {
            survival++;
        }
    }
    cout << "Mutations: " << mutations << "   Survivals: " << survival << endl;
}

int main(){
    for (int x = 0; x < 10; x++){
        domutation();
    }
    int wait;
    cin >> wait;
}

每个单独的domutation()迭代产生与前一次迭代不同的结果,但每次运行应用程序时,结果总是与我上次运行它时的结果相同,例如第一次迭代总是产生38个突变,最后一个总是产生52个突变,并且所有突变都不变。

我确定我做的事情很糟糕!

我在Windows 8.1的VS 2013中工作。

谢谢!

1 个答案:

答案 0 :(得分:1)

rand为您提供可预测的数字流。您需要播种它以选择此流中的不同点来启动。假设你不会每秒运行你的程序超过一次,那么当前时间是一个便宜/容易的种子。

int main(){
    srand(time(NULL));
    for (int x = 0; x < 10; x++){
        domutation();
    }

请注意,不提供种子相当于始终使用srand(0)

启动您的程序