相关疑难解决方法(0)

<random>在Linux中生成相同的编号,但在Windows中不生成

下面的代码用于生成区间[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)

c++ linux windows gcc visual-studio-2013

88
推荐指数
2
解决办法
6934
查看次数

Rand()%14仅生成值6或13

每当我运行以下程序时,返回的值总是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,它就可以了.

c++ random srand

14
推荐指数
2
解决办法
916
查看次数

如何在time.h中使用函数srand()?

我的程序包含的代码每次执行时都应生成一个随机的正整数.它生成随机数但只生成一次.在那之后,当我执行相同的代码时,它给了我相同的值,并且它使我的代码无用.

我开始使用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 random srand

11
推荐指数
1
解决办法
14万
查看次数

C++ rand和srand在不同的机器上获得不同的输出

我想生成一个随机整数,所以我使用了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实现.请告诉我其他机器与我的相同结果.

提前致谢.

c++ random multiplatform

4
推荐指数
1
解决办法
4391
查看次数

为什么(rand()%中的任何东西)在C++中总是0?

我无法让rand()在C++中工作.rand()通常给我一个非常大的数字.当我尝试使用模运算符(%)给它一个范围时,它总是返回0,无论如何.

在程序开头播种随机数生成器也无济于事.

c++ random

3
推荐指数
3
解决办法
2万
查看次数

标签 统计

c++ ×4

random ×4

srand ×2

c ×1

gcc ×1

linux ×1

multiplatform ×1

visual-studio-2013 ×1

windows ×1