drand48 sur Windows
Je suis à la recherche d'un équivalent de drand48 sur Windows. Pour tous ceux qui ne connaissent pas, le suivant n'est pas équivalent:
(double)rand()/RAND_MAX;
Tout d'abord, rand retourne les valeurs dont RAND_MAX
D'autre part, sur Windows RAND_MAX=32767 qui est une trop courte période pour mon application.
Mon but est de générer du bruit pour une simulation. Il est souhaitable d'utiliser un générateur pseudo-aléatoire avec la même période que drand48.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, notez que vous semblez confondre la résolution de la période. Sur Windows, rand valeurs de retour de 0 à 32767, mais cela ne signifie pas que les mêmes valeurs se répète toutes les 32768 appels. Donc rand doit être parfaitement adéquate, sauf si vous avez besoin de plus de 16 bits de résolution. (La résolution et la période sont les mêmes dans drand48, mais pas dans tous les générateurs de nombres pseudo-aléatoires.)
Si vous n'avez pas besoin de connaître le comportement de drand48, rand_s serait l'option la plus simple. Il a une résolution de 32 bits, moins de drand48 mais c'est suffisant pour la plupart des besoins. Il génère un point de vue cryptographique sécurisé de nombres aléatoires, donc il n'y a pas de période fixe. Un problème possible est qu'il sera beaucoup plus lente que drand48.
Si vous voulez le même comportement de drand48, le l'algorithme est documenté et devrait être facile à re-mettre en œuvre, ou vous pouvez utiliser la le code source à partir de FreeBSD (lien vers le code source du navigateur sur http://fxr.watson.org/).
Il pourrait ne pas être une réponse précise à votre question, mais il est encore une solution. Utiliser le CryptGenRandom(c'est la forme la WinAPI).
7 ans de retard à la fête. Désolé.
Gnu Scientific Library est une bonne solution à ce problème. La bibliothèque emploie plusieurs de haute qualité générant des algorithmes.
https://www.gnu.org/software/gsl/doc/html/rng.html