大约3年前,我和一位同事一起使用C++编写了一个二维随机漫步程序,开始时每次运行得到的模式都不同,看起来程序正常。但是当我们决定增加步数时,会出现明显的蝴蝶图案。我们发现,每次运行程序时,图案都会重复,但从蝴蝶的不同位置开始。我们得出结论并报告说,这是由于与srand()函数相关联的伪随机生成器导致的。今天我再次找到了这份报告,仍然有些事情我想要理解。我希望更好地理解伪随机生成器的工作原理,以便获得这种对称和循环模式。我所说的模式如下(步骤按彩虹序列进行颜色编码,以便欣赏漫步的进展):
编辑:
我正在添加用于获取此图的代码:
#include<iostream>
#include<cmath>
#include<stdlib.h>
#include<time.h>
#include <fstream>
#include <string.h>
#include <string>
#include <iomanip>
using namespace std;
int main ()
{
srand(time(NULL));
int num1,n=250000;
ofstream rnd_coordinates("Random2D.txt");
float x=0,y=0,sumx_f=0,sumy_f=0,sum_d=0,d_m,X,t,d;
float x_m,y_m;
x=0;
y=0;
for(int i=0;i<n;i++){
t=i;
num1= rand()%4;
if(num1==0){
x++;
}
if(num1==1){
x--;
}
if(num1==2){
y++;
}
if(num1==3){
y--;
}
rnd_coordinates<<x<<','<<y<<','<<t<<endl;
}
rnd_coordinates.close();
return 0;
}