我可能是盲目的,我每次运行此控制台应用程序时都得到相同的结果,尽管使用了随机数字。任何人都可以解释我哪里出错了吗?这是代码:
#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中工作。
谢谢!
答案 0 :(得分:1)
rand
为您提供可预测的数字流。您需要播种它以选择此流中的不同点来启动。假设你不会每秒运行你的程序超过一次,那么当前时间是一个便宜/容易的种子。
int main(){
srand(time(NULL));
for (int x = 0; x < 10; x++){
domutation();
}
请注意,不提供种子相当于始终使用srand(0)