Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么在循环中使用随机数时会得到相同的结果?_C++_Loops_Random_Visual Studio 2013_Windows 8.1 - Fatal编程技术网

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;icout
rand
为您提供了一个可预测的数字流。您需要对其进行种子设定,以在此流中选择一个不同的点开始。假设您每秒运行程序的次数不会超过一次,则当前时间是一个廉价/简单的种子

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你需要找到一个每秒变化超过一次的种子。例如,哪个提供微秒分辨率。