Bonjour a tous,
Est-ce que quelqu'un sait comment écrire une fonction qui return une valeur random et n'utilise pas les librairies <stdlib.h> et <time.h>?
merci
Version imprimable
Bonjour a tous,
Est-ce que quelqu'un sait comment écrire une fonction qui return une valeur random et n'utilise pas les librairies <stdlib.h> et <time.h>?
merci
Sous nux, tu ouvres un flux en lecture sur /dev/random et tu lis quelques octets.
Sous Windows, tu peux utiliser la CryptoAPI et sa fonction CryptGenRandom().
Mais je suppose que ton exercice consiste plutôt à trouver un algorithme de génération pseudo-aléatoire (j'en ai vu dans mes cours de "simulation" en école d'ingé), et de l'implémenter en C.
PS: <stdlib.h> et <time.h> ne sont pas des bibliothèques ("librairie" est un anglicisme sur un faux-ami), mais des fichiers d'en-tête de la bibliothèque standard du C.
Tu trouveras le pseudo-code pour un algo tel que Mersenne Twister ici: http://en.wikipedia.org/wiki/Mersenne_Twister
Avec une implantation en C ici: http://www.cs.hmc.edu/~geoff/mtwist.html
Thierry
Au passage, une question tout bête, comment initialiser un algo tel que Mersenne Twister autrement qu'avec le concept du temps ?
Tu ne peux pas avoir un truc imprévisible.
Mais tu peux l'initialiser avec ton ID de processus, ou tout simplement demander la "graine" à l'utilisateur (typiquement dans le cas d'un logiciel de simulation)...
Si j'ai bien compris, parce que c'est un exercice et qu'il n'a pas le droit.
Non non, pour moi c'était une question de curiosité. J'ai cherché à droite à gauche, trouvé plusieurs solutions (notamment le process ID comme Médinoc l'avait dit).
Sur linux à priori, il y a la commande /dev/random qui permet de récupérer une graine sympatoche.
http://en.wikipedia.org/wiki/Urandom
Pour la petite histoire, je suis tombé sur un lien ou des universitaire avait craqué les mdp netscape car il s'était rendu compte que le random de netscape se basait sur l'heure et l'ID process ^^
Qui dit que le process ID est suffisamment changeant d'un lancement à l'autre ?
Idem pour /dev/random.
Et si c'est le cas, quelle est la valeur qui change imperturbablement dans le temps si ce n'est le compteur de l'horloge calendaire ?
Quoiqu'on fasse, on retombe dessus, et c'est logique.
Il me semble avoir lu que /dev/random est garanti être de qualité cryptographique...Citation:
Envoyé par Emmanuel Delahaye
Edit: Si j'ai bien compris Wikipédia, /dev/urandom est déjà de qualité cryptographique, et /dev/random est d'encore meilleure qualité.
Ca veut dire quoi suffisamment changeant? Meme si les id sont consecutifs, ca devrait n'influencer en rien.
(En passant, il y a d'autres algo plus simples que le Mersenne Twister qui sont au moins aussi bien. Voir par exemple: http://groups.google.com/group/comp....c4ea1169e463ae, en cherchant d'autres messages de l'auteur, on peut recuperer quelques generateurs qui doivent etre assez bon -- l'auteur est aussi l'auteur de Diehard).