Des nombres aléatoires en Assembleur
Mik
-
naholyr -
naholyr -
Bonjour. Dans le cadre d'un projet entre étudiants, nous réalisons un petit programme en Assembleur type 8086. Pour mener à bien notre projet, nous avon besoin de définir une procédure qui puisse nous calculer un nombre aléatoire entre 0 et n.
Après différentes tentatives, nous n'y sommes pas parvenus, les nombres générés s'avérant plus ordonnés qu'aléatoires.
Pourriez vous nous aider ?
Comment faire pour générer des nombres aléatoires en Assembleur 8086 ?
Merci de votre aide.
Mik
Après différentes tentatives, nous n'y sommes pas parvenus, les nombres générés s'avérant plus ordonnés qu'aléatoires.
Pourriez vous nous aider ?
Comment faire pour générer des nombres aléatoires en Assembleur 8086 ?
Merci de votre aide.
Mik
A voir également:
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur).
- Tableau word - Guide
- Dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. - Guide
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur) - Forum C#
- Trier un tableau excel - Guide
- Comment calculer la moyenne sur excel - Guide
2 réponses
Pourquoi ne pas utiliser des fonctions pseudo-aleatoires mathematiques ?
l'algo generalement utilisé est le suivant:
================
germe: un entier // en anglais: "seed" tu as du deja entendre ca
// cette variable doit etre globale, reserve lui un espace memoire.
initialiser: l'action (n: un entier)
algo:
germe <- n;
nombre_au_hasard: la fonction (limite: un entier) -> un entier
algo:
germe <- f ( germe );
-> germe mod limite;
=================
ou f est une fonction idealement chaotique.
Comme en ASM ca sera tres compliqué d'avoir une fonction vraiment satisfaisante, vous pouvez vous contenter d'un germe sur 32 bits, et de la fonction suivant (tres connue)
f(x) = 4 * x * ( 1 - x )
les resultats sont assez satisfaisants pour une limite sur 8 bits ( ce qui est deja pas mal, pour une fonction tres simple ).
pour avoir un truc vraiment bien, essaye de reinitialiser le germe regulierement, avec une valeur dependant de l'horloge.
l'algo generalement utilisé est le suivant:
================
germe: un entier // en anglais: "seed" tu as du deja entendre ca
// cette variable doit etre globale, reserve lui un espace memoire.
initialiser: l'action (n: un entier)
algo:
germe <- n;
nombre_au_hasard: la fonction (limite: un entier) -> un entier
algo:
germe <- f ( germe );
-> germe mod limite;
=================
ou f est une fonction idealement chaotique.
Comme en ASM ca sera tres compliqué d'avoir une fonction vraiment satisfaisante, vous pouvez vous contenter d'un germe sur 32 bits, et de la fonction suivant (tres connue)
f(x) = 4 * x * ( 1 - x )
les resultats sont assez satisfaisants pour une limite sur 8 bits ( ce qui est deja pas mal, pour une fonction tres simple ).
pour avoir un truc vraiment bien, essaye de reinitialiser le germe regulierement, avec une valeur dependant de l'horloge.
Avez vous utilisé l'horloge ? Les centièmes de seconde ? Quelle est la valeur de n que vous vous étiez fixés ?
Je dois générer des nombres aléatoires entre 1 et 4 inclus.
J'ai effectivement pensé à l'horloge système ( interruption 21h - 2Ch ) mais vous savez, aujourd'hui les ordinateurs sont ultra rapides et lors de l'éxécution du programme, même si je choisis les centièmes de secondes, la procédure random va me renvoyer quelques dizaines de fois le meme nombre avant de passer au suivant, car l'ordinateur aur éxécuté la même fonction plusieurs fois en 1 centième de seconde...
J'ai effectivement pensé à l'horloge système ( interruption 21h - 2Ch ) mais vous savez, aujourd'hui les ordinateurs sont ultra rapides et lors de l'éxécution du programme, même si je choisis les centièmes de secondes, la procédure random va me renvoyer quelques dizaines de fois le meme nombre avant de passer au suivant, car l'ordinateur aur éxécuté la même fonction plusieurs fois en 1 centième de seconde...