Algorithme des nombres aleatoires

Résolu
goast_tu Messages postés 212 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 28 mai 2011 - 23 avril 2006 à 17:04
goast_tu Messages postés 212 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 28 mai 2011 - 27 avril 2006 à 11:59
Salut!

Pour
mon application j'ai besoin de créer un algorithme de generation de
nombres aleatoires comme. Je veux pour que ca fonctionne comme rand().

Je ne veux pas reutiliser cette fonction car elle doit depondre du platforme ou du compilo.

Est ce que quelqu'un sais comment faire?

8 réponses

nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
25 avril 2006 à 16:27
Bah, la fonction qu'il t'a donné au dessus est la réplique exacte de la fonction rand du CRT (C runtime), ou plutôt devrais-je dire la recopie exacte.

Je vais te donner le code donné dals la source de la CRT :

static long holdrand = 1L;

void __cdecl srand (
unsigned int seed
)
{
holdrand = (long)seed;
}

int __cdecl rand (
void
)
{
return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}

Si tu vois quelque chose de pas portable dans ce que je t'ai donné, prévient moi car moi je vois pas...
3
NAVIE Messages postés 23 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 23 avril 2006
23 avril 2006 à 17:09
Tu peux générer des chiffres aux hasard en récuperant l'heure du système et mettant un modulo.

NAVI
0
goast_tu Messages postés 212 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 28 mai 2011 2
23 avril 2006 à 18:26
Merci pour ta reponce. Mais ca me convien pas je veux pour que je puis
l'initialiser une fois pour qu'il genere toujours la meme suite de
valeurs si je l'initialise avec le meme parametre
0
spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
23 avril 2006 à 20:00
si ca peut t'aider voila un code source que j'ai recuperé dans la libc windows :


unsigned int seed; // graine a initialiser

int rand()
{
seed = ((seed * 214013 + 2531011) >> 16) && 0x7fff);

return seed;
}

si on regarde le code, le resultat est compris entre 0 et 0x7fff (normalement)

a+


Il n'y a que ceux qui font rien qui ne se trompent jamais
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
23 avril 2006 à 20:45
seed = ((seed * 214013 + 2531011) >> 16) && 0x7fff);

seed sera toujours égal à 0 ou 1 :
&& = ET logique

Je pense que c'est plutôt :
seed = ((seed * 214013 + 2531011) >> 16) & 0x7fff);
0
spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
23 avril 2006 à 21:15
en effet, autant pour moi ... dsl


Il n'y a que ceux qui font rien qui ne se trompent jamais
0
goast_tu Messages postés 212 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 28 mai 2011 2
25 avril 2006 à 16:07
non ca me convien pas je veu créer la meme fonction que rand() et
srand() je peu les utiliser mais dans ce cas ca risque de ne pas etre
portable
0
goast_tu Messages postés 212 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 28 mai 2011 2
27 avril 2006 à 11:59
OK, merci

désolé, je suis con parfois ;-)

0
Rejoignez-nous