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

Rigel Io Messages postés 11 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 octobre 2012 - 3 juin 2004 à 22:08
cs_pjb Messages postés 19 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 17 août 2004 - 13 août 2004 à 16:50
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juin 2004 à 01:17
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++
0
Rigel Io Messages postés 11 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 octobre 2012
4 juin 2004 à 22:50
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juin 2004 à 23:15
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++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
5 juin 2004 à 12:58
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

@++
0

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

Posez votre question
cs_pjb Messages postés 19 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 17 août 2004
13 août 2004 à 16:50
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...
@+
0
Rejoignez-nous