下面的代码用于生成区间[1,100]中的五个伪随机数的列表.我播种default_random_enginewith time(0),它在unix时间内返回系统时间.当我使用Microsoft Visual Studio 2013在Windows 7上编译和运行此程序时,它按预期工作(见下文).但是,当我使用g ++编译器在Arch Linux中这样做时,它表现得很奇怪.
在Linux中,每次都会生成5个数字.最后4个数字在每次执行时都会有所不同(通常情况就是如此),但第一个数字将保持不变.
Windows和Linux上5次执行的示例输出:
| Windows: | Linux:
---------------------------------------
Run 1 | 54,01,91,73,68 | 25,38,40,42,21
Run 2 | 46,24,16,93,82 | 25,78,66,80,81
Run 3 | 86,36,33,63,05 | 25,17,93,17,40
Run 4 | 75,79,66,23,84 | 25,70,95,01,54
Run 5 | 64,36,32,44,85 | 25,09,22,38,13
Run Code Online (Sandbox Code Playgroud)
除此之外,第一个数字在Linux上定期递增1.在获得上述输出后,我等了大约30分钟并再次尝试发现第一个数字已经改变,现在总是以26为单位生成.它继续定期增加1,现在是32.它似乎对应随着价值的变化time(0).
为什么第一个数字很少在运行中发生变化,然后在运行时,增加1?
代码.它整齐地打印出5个数字和系统时间:
#include <iostream>
#include <random>
#include <time.h>
using namespace std;
int main()
{
const int upper_bound = 100;
const int lower_bound = 1;
time_t …Run Code Online (Sandbox Code Playgroud) 每当我运行以下程序时,返回的值总是6或13.
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
//void randomLegs();
//void randomPush();
//void randomPull();
//void randomMisc();
int main(int argc, const char * argv[])
{
srand(time(NULL));
//randomLegs();
cout << rand() % 14;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在今天和昨天,我已经将程序运行了近百次.
谁能告诉我我做错了什么?
谢谢.
编辑:顺便说一句,如果我将rand()的范围改为13或15,它就可以了.
我的程序包含的代码每次执行时都应生成一个随机的正整数.它生成随机数但只生成一次.在那之后,当我执行相同的代码时,它给了我相同的值,并且它使我的代码无用.
我开始使用rand函数,然后我将srand()函数与time.h头文件一起使用,但它仍然无法正常工作.
#define size 10
for(i=0;i<size;i++)
Arr[i] = rand()%size;
Run Code Online (Sandbox Code Playgroud)
第一次通话(随机):
6 0 2 0 6 7 5 5 8 6
Run Code Online (Sandbox Code Playgroud)
第二次通话(随机但与之前相同):
6 0 2 0 6 7 5 5 8 6
Run Code Online (Sandbox Code Playgroud)
后来我访问了Stack Overflow问题并阅读了srand()函数,并将其用作:
#include<time.h>
for(i=0;i<size;i++)
Arr[i] = srand(time(NULL));
Run Code Online (Sandbox Code Playgroud)
第一个电话:
-10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327
Run Code Online (Sandbox Code Playgroud)
第二个电话:
-10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326
Run Code Online (Sandbox Code Playgroud)
它给了我不同的(但不是随机的值).我已经将Arr [i]定义为unsigned int,但我仍然得到负值.
我想生成一个随机整数,所以我使用了C++ rand(void)和srand(int)函数:
int main(){
srand(1);
cout << rand() << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
好的,它符合我的需要.每次执行它我得到相同的结果,我喜欢它!
但有一个问题.当我在计算机上执行它时,我输出了16807.但是当我在另一台机器上执行时,我得到了1804289383.
我知道rand()和srand(int)有一个类似于这个的简单实现:
static unsigned long int next = 1;
int rand(void) // RAND_MAX assumed to be 32767
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % 32768;
}
void srand(unsigned int seed)
{
next = seed;
}
Run Code Online (Sandbox Code Playgroud)
所以为什么?是否有可能rand()在多台机器上有不同的实现?我该怎么办?
我想以这样的方式修改另一台机器,我也从那台机器上获得16807.
请注意,我喜欢计算机上的rand实现.请告诉我其他机器与我的相同结果.
提前致谢.
我无法让rand()在C++中工作.rand()通常给我一个非常大的数字.当我尝试使用模运算符(%)给它一个范围时,它总是返回0,无论如何.
在程序开头播种随机数生成器也无济于事.