我在QtCreator1.0.0(Qt版本4.5.0)中编写了一个程序,在main()函数的开头放置了srand(time(0));然后我从另一个线程(QThread的子类)调用rand()。在该函数中,每次我运行程序时,rand()都会生成相同的数字序列。我不会在一秒钟内多次运行该程序。为什么会这样? 最佳答案 您需要在每个线程中调用srand,因为种子存储在线程特定的block中。 关于c++-rand()不遵守QtCreator中的srand(),我们在StackOverflow上
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Randgeneratingsamenumbers在StackOverflow上回答另一个问题时尝试了以下方法:#include#includeusingnamespacestd;main(){srand(time(NULL));cout非常奇怪,第一个输出数字总是相似的数字,无论是在带有cygwin的Windows7上还是在带有Leopard的Mac上。最后一个数字是从0到1的一个很好的随机数。如果第一个cout行被注释掉,第一个打印的随机数总是一个相似的值。怎么会这样?
在第3方库中广泛使用srand()/rand()调用,带有预定义的种子。在同一进程中组合不同的库时会出现问题。有时很难确保正确的调用顺序,可以混合使用srand()和rand()调用。另一个问题是无法在应用程序级别选择种子值。作为一般规则,我们是否应该避免在库中使用srand()(包括开源),将播种任务留给应用程序? 最佳答案 出于您提到的原因,在实际应用中最好使用boost::random或C++11random库 关于c++-在库中使用srand()的问题,我们在StackOverf
我正在编写一个C++程序,需要为其内部使用创建一个临时文件。我想通过运行多个进程来允许程序的并发执行,所以临时文件名需要随机化,这样每个派生的进程都会生成一个唯一的临时文件名供自己使用。我正在使用rand()为部分文件名生成随机字符,因此我需要使用srand()初始化随机数生成器的种子。有哪些选项可以将一个好的参数传递给srand(),这样两个进程就不会使用相同的种子值进行初始化?我的代码需要同时在Windows和Linux上运行。 最佳答案 问题是实际上询问如何创建一个唯一命名的临时文件。操作系统可能为此提供了一个API,这意味着
C++产生随机数的依据是什么?Istheresomelogicorprinciplebehindthat?Arethenumbersgeneratedcompletelyrandom?假设我正在运行这个程序:#include#include#includeintmain(){/*Declarevariabletoholdsecondsonclock.*/time_tseconds;/*Getvaluefromsystemclockandplaceinsecondsvariable.*/time(&seconds);/*Convertsecondstoaunsignedinteger.*
我不太确定如何表达这个问题,但我找不到其他类似的问题。假设我有这段代码:srand(1);srand(SOME_DEFINED_CONST_INT);如果我在许多不同的物理机器上运行这个可执行文件,是否保证它们之间的rand()顺序一致?即,如果我在一台机器上得到1,4,6,3,4,我是否总是会在其他机器上得到相同的序列?如果是,如何证明?它是标准的一部分吗?如果不,我能做些什么吗? 最佳答案 不,标准保证没有这样的事情。但是,生成随机数的逻辑在C标准库中。因此,如果您使用相同版本的库构建应用程序,则顺序应该相同。我回答的第二部分只
尝试解决一个练习,我必须每5秒打印一个介于35°C和-10°C之间的随机温度值,然后是日期和时间。一切看起来都按预期工作,但是当我在测试脚本中输入代码时,出现以下错误。这是我的代码:#include#include#include#definetemp_max35#definetemp_min-10#defineFREQUENCY5intmain(void){srand(time(NULL));while(1){intnumber=rand()%(temp_max*100-temp_min*100)+temp_min*100;doubletemperature=(double)numb
在rand()consideredharmful有人指出srand(time(NULL))不好,因为srand需要一个unsignedint,但是对于微软的编译器来说,time_t默认为64位数字,因此会发生缩小转换。但是,time_t是实现定义的。既然我看到srand(time(NULL))如此流行(甚至在这个网站上),是否应该劝阻它? 最佳答案 SinceIseesrand(time(NULL))soprevalent(evenonthissite),shoulditbediscouraged?这取决于您希望如何使用生成器的输出
背景:我使用rand(),std::rand(),std::random_shuffle()以及我的代码中用于科学计算的其他函数。为了能够重现我的结果,我总是明确指定随机种子,并通过srand()设置它.直到最近,当我发现libxml2也会调用srand()懒惰地第一次使用它-这是在我早期的srand()之后打电话。我填写了bugreporttolibxml2aboutitssrand()call,但我得到了答案:Initializelibxml2firstthen.That'saperfectlylegalcalltobemadefromalibrary.Youshouldnotex
我有几个线程都运行相同的功能。在每一个中,它们都会多次生成不同的随机数。我们试图通过将srand(time(0))放在函数的开头来做到这一点,但似乎它们都得到了相同的数字。我们是否需要每个程序只调用一次srand(time(0)),即在main的开头(例如),在每个程序的开头被多次调用的函数,还是别的什么? 最佳答案 srand()种子随机数生成器。您应该只需要在启动期间调用一次srand(time(NULL))。也就是说,文档指出:Thefunctionrand()isnotreentrantorthread-safe,since