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
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.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
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
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
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)...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Si j'ai bien compris, parce que c'est un exercice et qu'il n'a pas le droit.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
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...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é.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
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).
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Partager