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

问题描述 投票:3回答:3

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

qt random
3个回答
8
投票

不.qrand只能生成与整数相同的唯一数字,因此 - 无论实现如何 - 您都不能指望唯一性。

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

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

alt text (来源:dilbert.com


6
投票

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

你也可以使用createUuid()createUuid()生成的UUID是随机类型。他们的QUuid::Version位设置为QUuid::Random,他们的QUuid::Variant位设置为QUuid::DCE。 UUID的其余部分由随机数组成。从理论上讲,这意味着createUuid()生成的UUID很可能不是唯一的。但这是一个非常小的机会。

我可以保证那些生成的UUID不一定是唯一的,所以如果你确实需要它们是唯一的,请查看libuuid或类似的东西。


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.