Nombre aléatoire Unique séquence à l'aide de qrand() et qsrand()
Je veux générer unique séquence des nombres aléatoires dans l'intervalle QT, à l'Aide de QDateTime::currentDateTime().toTime_t() comme valeur de départ, sera qrand() de générer des nombres aléatoires?
OriginalL'auteur Suresh Manchi | 2009-07-29
Vous devez vous connecter pour publier un commentaire.
Pas.
qrand
ne peut générer autant de numéros uniques comme le fit en un entier, de sorte que, quelle qu'en soit la mise en œuvre -- vous ne pouvez pas compter sur l'originalité.Aussi, de savoir qu'une autre de graines de crée un autre nombre entier aléatoire donnerait un niveau de prévisibilité, qui rend effectivement
qrand
pas au hasard plus.Edit: je vous jure que je ne suis pas en train de se moquer de vous en publiant une caricature; je pense que c'est une très bonne explication du problème:
(source: dilbert.com)
Pas de. Pas impérativement.
qrand est juste un générateur pseudo-aléatoire, il ne donne aucune garantie de la valueas sont uniques. Vous devez vous assurer que vous-même, par exemple, ranger les nombres générés dans un ensemble.
OriginalL'auteur balpha
Selon la façon dont vous stockez vos identifiants de session, vous pouvez généré un (surtout) la garantie de l'identificateur unique à l'aide d'un UUID. Consultez la documentation de
QUuid
. Également être conscients de ce (caractères gras ajoutés):Je peux attester du fait que ceux générés Uuid ne sera pas nécessairement être unique, donc si vous avez besoin d'eux pour être unique, regarder dans
libuuid
ou quelque chose de similaire.OriginalL'auteur Caleb Huitt - cjhuitt
Selon la Documentation De Qt, QRand est juste une version thread-safe de la norme rand(), je ne pourrais pas assumer la méthode utilisée est plus en sécurité supérieure à celle de rand() en fonction de cette description.
Je pense que vous devez utiliser une terminologie différente de 'unique' de nombres aléatoires (pas de Pseudo-Random Number Generator va produire un unique flux, comme entrée X toujours produire une sortie Y). Quelle est la réelle situation?
Ah... je vois que vous êtes désireux maintenant. qrand() seul ne fonctionnera pas pour cela, mais vous pouvez utiliser qrand() en plus d'une table d'précédemment attribué (active) id de session pour s'assurer que la valeur est unique avant de l'envoyer au client. En fonction de vos besoins, cela peut être suffisant. Bien, vous voudrez peut-être examiner d'autres PRNGs - telles que la lecture à partir de /dev/urandom sur Linux, comme un remplacement pour le qrand().
OriginalL'auteur Kitsune