Avez-vous des algorithmes pour la génération de nombre aléatoire?

Signaler
Messages postés
11
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 octobre 2012
-
Messages postés
19
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
17 août 2004
-
Salut, ma question est donc assez simple je voudrai seuleument savoir comment générer des nombres aléatoires. Je voudrai savoir car à chaque fois que j'ai besoin de faire cela, j'utilises rand et toute ces fonctions. Mais comment fonctionnent-t-elle?
Merci de répondre à ma curiosité.

Rigel-IO

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
exemple en pseudo code:

valeur a conserver, on init au cas ou user ne le ferait pas:

seedRand DD 0FFFFFFFF

tu fais un srand (init alea) avec un param

srand PROC ; param int dans EAX
; ici tu lui fais subir ce que tu veux puis:
mov seedRand, eax
ret 0
srand ENDP

rand PROC ; AUCUN PARAM
mov eax, seedRand
; triture bien ton EAX
mov seedRand, eax ; on conserve de nouveau
; on secoue encoore un peu valeur avant retour
; et on la donne dans EAX comme normal
ret 0
rand ENDP

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
11
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 octobre 2012

Je suis désolé BruNews mais tu n'as pas répondu à ma question car j'ai demandé justement comment faire un code pour générer des nombres aléatoires sans utiliser de fonction randomize ou autre. Je voudrais savoir que représente (en algo ou en code) ces fonctions.
Merci quand même d'avoir essayé, si tu as la réponses donne la moi, merci. :)

Rigel-IO
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Exemple tire d'un truc perso, sans appel d'une func rand (ou autre nom peu importe), alea est fait pendant une boucle de remplissage:

sub esp, 4 ; seedRand
rdtsc ; remplit EAX
mov [esp], eax ; sauve seedRand
lea ebx, [edi+ebx*4] ; adresse out pour array
fillArray:
mov eax, 214013
mul dword ptr[esp]
add eax, 2531011
mov [esp], eax ; sauve seedRand
mov ecx, offset szbuff
and eax, 07FFFh
; suite de mon bouclage perso
; qui remplit une lisbox

tu regardes rand, random ou autre mot de ce genre par google et tu trouveras toute une litterature sur ce sujet.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

en voila un autre tiré d'un code trouvé sur le net, je me rappelle plus l'auteur, je l'ai modifié afin de pouvoir avoir une valeur max.

initRand MACRO
call GetTickCount
mov [nRand],eax
ret
ENDM

.DATA?
nRand dd ?
.CODE
genNumber PROC USES EBX ESI Max:DWORD
mov ecx,[nRand]
mov edx,[nRand]
not ecx
and ecx,3
mov ebx,edx
lea esi,[ecx*8+8]
@@:
mov ecx,ebx
and ecx,1fh
mov eax,ebx
ror edx,cl
rol eax,cl
neg edx
lea ebx,[eax-1]
xor edx,ebx
dec esi
jne @B
xor eax,eax
mov [nRand],edx
xchg eax,edx
idiv Max
mov eax,edx
ret
genNumber ENDP

@++
Messages postés
19
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
17 août 2004

salut !

une manière très simple de créer un moteur pseudo aléatoire est d'utiliser un timer de la carte-mère (très facile en mode réel via les interruptions... --> vas sur le net...)

en effet, ce dernier "compte" tellement vite que lorsque tu appeleras une fonction utilisant le timer tu obtiendras un nombre quasi-aléatoire, à condition que se soit toi qui provoque l'appel de cette fonction (par ex. en pressant une touche, ou après avoir tapé du texte ac. un scanf...)

j'espère que j'ai répondu à ta question..., mais vas sur le net y'a des milliers de sites consacrés à ce sujet...
@+