C++ 为什么在循环中使用随机数时会得到相同的结果?
我可能是瞎了眼,但每次运行这个控制台应用程序时都会得到相同的结果,尽管使用了随机数。谁能解释一下我哪里出了问题?代码如下:C++ 为什么在循环中使用随机数时会得到相同的结果?,c++,loops,random,visual-studio-2013,windows-8.1,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
#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;
}
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
布尔细菌(长突变,长机会){
布尔结果;
如果(mut>=机会){
结果=真;
}
否则{
结果=假;
}
返回结果;
}
int run=1000000//迭代次数
int突变;
智力生存;
void domutate(){
突变=0;
生存率=0;
for(int i=0;i coutrand
为您提供了一个可预测的数字流。您需要对其进行种子设定,以在此流中选择一个不同的点开始。假设您每秒运行程序的次数不会超过一次,则当前时间是一个廉价/简单的种子
int main(){
srand(time(NULL));
for (int x = 0; x < 10; x++){
domutation();
}
intmain(){
srand(时间(空));
对于(int x=0;x<10;x++){
domutate();
}
请注意,不提供种子相当于始终使用srand(0)
“尽管使用随机数”,但您没有使用随机数。您使用的是伪随机数。您应该使用C++11
标头。您没有种子设定随机数生成器使用srand(时间(NULL))作为主程序的第一行。每次运行程序时,您都有相同的种子。相同的种子-相同的生成数非常好,这就很好了,谢谢。我知道这将是非常明显的事情。我有一个不同的(因此是不正确的)理解伪随机数。谢谢大家。非常感谢。我对伪随机数有一个错误的理解。谢谢你们。如果我想每秒运行一次以上的模拟,我该怎么办?我不知道,但我很好奇…@GuyStimpson你需要找到一个每秒变化超过一次的种子。例如,哪个提供微秒分辨率。