标签: srand

srand() - 为什么只调用一次?

这个问题是关于这个问题的评论 推荐的方法来初始化srand?第一条评论说srand()应该只在应用程序中调用ONCE.为什么会这样?

c random srand

71
推荐指数
4
解决办法
7万
查看次数

建议初始化srand的方法?

我需要一种'好'的方法来初始化C++中的伪随机数生成器.我发现一篇文章指出:

为了生成类似随机数的数字,srand通常被初始化为一些独特的值,就像那些与执行时间相关的值.例如,函数时间返回的值(在标题ctime中声明)每秒都不同,这对于大多数随机需求来说足够独特.

Unixtime对我的应用来说并不是很有特色.有什么更好的方法来初始化它?奖励点是否可移植,但代码主要在Linux主机上运行.

我正在考虑做一些pid/unixtime数学来得到一个int,或者可能从中读取数据/dev/urandom.

谢谢!

编辑

是的,我实际上是每秒多次启动我的应用程序而且我遇到了碰撞.

c++ random srand

64
推荐指数
8
解决办法
9万
查看次数

`rand()`的用处 - 或谁应该调用`srand()`?

背景:我使用rand(),std::rand(),std::random_shuffle()和我的科学计算代码等功能.为了能够重现我的结果,我总是明确指定随机种子,并通过它设置srand().直到最近,当我发现libxml2也会srand()在第一次使用时懒得打电话- 这是在我早期的srand()电话之后.

我填写了一个关于它的srand()调用错误报告到libxml2,但我得到了答案:

首先初始化libxml2.这是一个完全合法的电话会议.您不应该期望没有其他人调用srand(),并且手册页无处声明srand()应该避免使用多个时间

这实际上是我现在的问题.如果一般政策是每个lib可以/应该/将要调用srand(),并且我可以/也可以在这里和那里调用它,我真的不知道它是如何有用的.或者如何rand()有用呢?

这就是为什么我认为,一般(不成文)策略是没有lib应该调用srand(),应用程序应该在开始时只调用它一次.(不考虑多线程.我想在这种情况下,你无论如何应该使用不同的东西.)

我也尝试研究其他库实际调用的一些srand(),但我没有发现任何.有吗?

我目前的解决方法是这个丑陋的代码:

{
    // On the first call to xmlDictCreate,
    // libxml2 will initialize some internal randomize system,
    // which calls srand(time(NULL)).
    // So, do that first call here now, so that we can use our
    // own random seed.
    xmlDictPtr p = xmlDictCreate(); …
Run Code Online (Sandbox Code Playgroud)

c c++ random srand

46
推荐指数
4
解决办法
2638
查看次数

srand与rand函数有什么关系?

据我所知,如果不更改种子数,rand()函数会生成相同的数字.这就是srand()的用武之地.时间总是在变化所以我知道你应该将time(null)参数传递给srand.我的问题是从教程网站下面的代码.

int main()
{
    int i, n=5;
    time_t t;

    /* Intializes random number generator */
    srand((unsigned) time(&t));

    /* Print 5 random numbers from 0 to 50 */
    for( i = 0 ; i < n ; i++ ) {
        printf("%d\n", rand() % 50);
    }

    return(0);
}
Run Code Online (Sandbox Code Playgroud)

我看不到srand的链接

((unsigned) time(&t)); 
Run Code Online (Sandbox Code Playgroud)

和兰特.

printf("%d\n", rand() % 50);
Run Code Online (Sandbox Code Playgroud)

兰德和斯特兰德之间的联系在哪里?我的意思或期望是我假设rand()将从srand()获取一些参数,因此它知道每次生成不同的数字.我假设它看起来像rand(srand(time(null));

这就像在不使用它的情况下初始化变量一样.srand正在初始化,但我没有看到它被使用.

rand会生成不同的数字,因为在rand之前首先调用srand吗?

c random srand

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

srand(1)和srand(0)之间有什么区别

我刚刚发现了将srand(1)C(++)的PRNG重置为任何调用之前的状态srand(如参考文献中所定义)的困难方法.然而,种子0似乎做同样的事情,或者在任何调用之前的状态srand似乎都使用种子0.这两个调用之间有什么区别或者他们做同样事情的原因是什么?

例如这段代码(在Ideone上执行)

#include <stdio.h>
#include <stdlib.h>

int main() {
    for (int seed = 0; seed < 4; seed++ ) {
        printf( "Seed %d:", seed);
        srand( seed );
        for(int i = 0; i < 5; i++ )
            printf( "    %10d", rand() );
        printf( "\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

回报

Seed 0:    1804289383     846930886    1681692777    1714636915    1957747793
Seed 1:    1804289383     846930886    1681692777    1714636915    1957747793
Seed 2:    1505335290    1738766719     190686788     260874575     747983061
Seed …
Run Code Online (Sandbox Code Playgroud)

c c++ random srand

18
推荐指数
3
解决办法
8852
查看次数

函数'time'的隐式声明[-Wimplicit-function-declaration] |

每当我尝试使用srand功能时,我都会收到此警告

"implicit declaration of function 'time' [-Wimplicit-function-declaration]|" 
Run Code Online (Sandbox Code Playgroud)

运行编译文件时出现一个Windows错误报告, 我是c编程的新手,我在教科书上发现了这个,但它对我不起作用.

  srand (time());  
  int x= (rand()%10) +1;  
  int y= (rand()%10) +1;  
  printf("\nx=%d,y=%d", x,y); 
Run Code Online (Sandbox Code Playgroud)

我需要做些什么才能纠正这个问题?

c srand

17
推荐指数
1
解决办法
5万
查看次数

srand(时间(NULL))不好吗?

被认为有害的rand()中,它被指出srand(time(NULL))是坏的,因为srand需要一个unsigned int,但对于Microsoft的编译器,time_t默认情况下是64位数,因此发生缩小转换.但是,time_t是实现定义的.

既然我看到srand(time(NULL))如此普遍(即使在这个网站上),是否应该气馁?

c++ random srand

17
推荐指数
1
解决办法
2221
查看次数

使用srand设置随机种子是现代C++吗?

对于使用的代码std::random_shuffle,我需要设置一个随机种子,以便在每个程序运行中产生的伪随机序列不同.

这里代码示例调用

srand ( unsigned ( time (NULL) ) );
Run Code Online (Sandbox Code Playgroud)

这需要

#include <ctime>
#include <cstdlib>
Run Code Online (Sandbox Code Playgroud)

我想知道:由于C++ 11包含伪随机数生成的主要更新,这仍然是最新的吗?我应该使用什么来设置随机种子std::random_shuffle

c++ random srand c++11

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

rand()生成相同的数字 - 即使我的主要是srand(time(NULL))!

所以,我正在尝试创建一个随机向量(想想几何,而不是一个可扩展的数组),每当我调用我的随机向量函数时,我得到相同的x值,尽管y和z是不同的.

int main () {
    srand ( (unsigned)time(NULL));
    Vector<double> a;
    a.randvec();
    cout << a << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用该功能

//random Vector
template <class T>
void Vector<T>::randvec()
{
    const int min=-10, max=10;
    int randx, randy, randz;

    const int bucket_size = RAND_MAX/(max-min);

    do randx = (rand()/bucket_size)+min;
    while (randx <= min && randx >= max);
    x = randx;

    do randy = (rand()/bucket_size)+min;
    while (randy <= min && randy >= max);
    y = randy;

    do randz = (rand()/bucket_size)+min;
    while (randz <= min && …
Run Code Online (Sandbox Code Playgroud)

c++ random srand

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

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
查看次数

标签 统计

srand ×10

random ×9

c++ ×7

c ×5

c++11 ×1