Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 使用qrand()和qsrand()的唯一随机数序列_Qt_Random - Fatal编程技术网

Qt 使用qrand()和qsrand()的唯一随机数序列

Qt 使用qrand()和qsrand()的唯一随机数序列,qt,random,Qt,Random,我想在QT中生成唯一的随机数序列,使用QDateTime::currentDateTime().toTime_t()作为种子值,qrand()会生成唯一的随机数吗?否。qrand只能生成尽可能多的适合整数的唯一数,因此——无论实现如何——都不能指望唯一性 此外,知道不同的种子创建不同的随机整数将产生一定程度的可预测性,从而有效地使qrand不再是随机的 编辑:我发誓我不是想通过张贴漫画来取笑你;我认为这是对问题的一个很好的解释: (来源:)根据,QRand只是标准rand()的线程安全版本,基

我想在QT中生成唯一的随机数序列,使用QDateTime::currentDateTime().toTime_t()作为种子值,qrand()会生成唯一的随机数吗?

否。
qrand
只能生成尽可能多的适合整数的唯一数,因此——无论实现如何——都不能指望唯一性

此外,知道不同的种子创建不同的随机整数将产生一定程度的可预测性,从而有效地使
qrand
不再是随机的

编辑:我发誓我不是想通过张贴漫画来取笑你;我认为这是对问题的一个很好的解释:


(来源:)

根据,QRand只是标准rand()的线程安全版本,基于这一描述,我不会认为所使用的方法比rand()更安全/更优越


我认为您需要使用与“唯一”随机数不同的术语(没有Psuedo随机数生成器将生成唯一流,因为输入X将始终生成输出Y)。实际情况如何?

根据您存储会话ID的方式,您可以通过使用UUID生成(大部分)有保证的唯一标识符。有关详细信息,请参阅文档。还要注意这一点(加粗):

您还可以使用
createUuid()
createUuid()
生成的UUID属于随机类型。其
quid::Version
位设置为
quid::Random
,其
quid::Variant
位设置为
quid::DCE
。UUID的其余部分由随机数组成理论上,这意味着
createUuid()
生成的UUID不唯一的可能性很小。
但可能性很小


我可以保证生成的UUID不一定是唯一的,因此如果您确实需要它们是唯一的,请查看
libuuid
或类似的内容。

Qt文档说,如果在程序执行期间的不同时间调用qrand(),则qrand()返回一个介于0和RAND_MAX之间的值,它会生成唯一的数字吗-Thank.qrand只是一个伪随机生成器,它不能保证值是唯一的。您必须确保自己,例如,将生成的数字存储在一个集合中。有一个正在运行的服务器进程,希望在客户端连接到它时将唯一的随机值指定为会话id。啊。。。我知道你现在想要什么了。单独使用qrand()是不起作用的,但是除了使用先前分配的(活动的)会话ID表之外,还可以使用qrand(),以确保在将值发送到客户端之前该值是唯一的。根据您的需要,这可能就足够了。尽管如此,您可能希望研究其他PRNG,例如在Linux上读取/dev/uradom,以替代qrand()。