【发布时间】:2014-08-22 12:50:33
【问题描述】:
我可能是个盲人,尽管我使用了随机数,但每次运行此控制台应用程序时都会得到相同的结果。任何人都可以解释我要去哪里错了吗?代码如下:
#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 中工作。
谢谢!
【问题讨论】:
-
“尽管使用随机数”您不使用随机数。您使用的是伪随机数。
-
您应该使用 C++11
<random>标头。 -
你没有播种随机数生成器
-
使用 srand(time(NULL)) 作为主文件的第一行。每次运行程序时,您都有相同的种子。相同的种子 - 相同的生成数字
-
太好了,成功了,谢谢。我知道这将是显而易见的事情。我对伪随机数有不同的(因此是不正确的)理解。谢谢大家。
标签: c++ loops random visual-studio-2013 windows-8.1