2011-07-28 2 views
2

Je fais une simulation de Monte Carlo en C++ et j'utilisais Boost pour des nombres aléatoires. J'ai aussi utilisé GSL. Mais il s'avère que la génération de nombres aléatoires est l'une de mes plus grandes inefficacités d'exécution, donc j'ai juste commencé à utiliser le bon vieux rand() de cstdlib.Quel est le mauvais rand de stdlib.h?

À quel point est-ce que je risque d'avoir de mauvaises propriétés aléatoires sur ma simulation? J'utilise environ 10^6 ou 10^7 échantillons de nombres aléatoires.

+0

Avez-vous lu les réponses dans [* about-rand- *] (http://stackoverflow.com/questions/328950/c-the-definitive-truth-about-rand-random-and-arc4random) avant de poster :?) Surtout Martin v. Löwis réponse donne quelques détails. Une simple requête google avec 'period of rand.c' l'a montré sur la première page. Des implémentations médiocres et la sélection de 10^6 numéros sur une gamme dont la garantie ne serait que d'au moins 32767 ne serait pas vraiment mon premier choix. Qu'est-il arrivé à ces implémentations de Mersenne-Twister? N'était-ce pas un bon compromis entre la vitesse et une longue période? – Dilettant

Répondre

0

Deux problèmes se posent: (1) RAND_MAX étant garanti au moins à 32767, il se peut qu'il n'y ait pas beaucoup de valeurs possibles (pas nécessairement mauvaises pour certaines applications) et (2) de mauvaises implémentations.

Si vous avez besoin de ce que l'on appelle un générateur de nombres aléatoires sécurisé, vous devrez chercher ailleurs. Mais pour de nombreuses applications, rand() est suffisant.

Un article de blog qui répond à vos préoccupations est http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx.

Questions connexes