Test de la fonction aléatoire rnd de visual basic

Soyez le premier à donner votre avis sur cette source.

Vue 15 524 fois - Téléchargée 1 137 fois

Description

Ce Simulateur de tirages du Loto montre que la fonction RND de Visual Basic permet de tirer des nombres
pseudo aléatoires de façon satisfaisante pour des combinaisons jusqu'à cinq numéros.Mais pour des combinaisons
de six numéros, la Pratique ne colle plus à la Théorie.On peut même voir que des combinaisons différentes,de six
numéros ne sont pas équiprobables.Ce qui bien sûr est loin d'être normal.Par exemple:la combinaison 5-15-25-35-45-27
sort bien trop souvent alors que c'est l'inverse pour la combinaison 1-2-3-4-5-6.Et ceci, même si on demande un très
grand nombre de tirages .(Par exemple 6500000000 tirages).
Pour beaucoup mieux simuler le Loto, un Générateur de nombres pseudo aléatoires existe:il s'agit du MERSENNE TWISTER
qui est très performant.Sa période est un nombre astronomique : (2^19937)-1 (Mais pour l'instant il n'est pas dans la source).
Pour se servir du programme,il faut entrer le nombre de tirages voulu et saisir une combinaison de six numéros à tester.
On lance ensuite par la commande SIMULER.Après un test de rapidité du PC, l'heure de la fin de la simulation s'affichera.

Source / Exemple :


DANS LE ZIP

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
169
Date d'inscription
samedi 10 décembre 2005
Statut
Membre
Dernière intervention
18 juin 2017

Bonjour US_30

Merci pour les appréciations.
Le but de cette source n'était pas initialemment de montrer les limites de RND.
C'est en utilisant les résultats donnés par le programme
qu'à ma surprise, le pseudo aléatoire RND à montré ses limites pour simuler la sortie de 6 numéros au Loto.
Bien sûr,comme l'a montré GOBILLOT, plus haut, il n'y a rien d'étonnant à celà.
Pour la programmation , en effet, je n'ai pas cherché en priorité à optimiser le Code.
A plus
JP
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Morale de l'histoire : Bien ou mal simulé, on voit qu'avec 1 chance sur 13983816 pour vraiment gagner (6 n°), c'est de la folie pure de jouer au loto ! ...

Une remarque sur la programmation : elle est largement optimisable... Mais l'intérêt de montrer la limite de RND est intéressant.

Amicalement,
Us.
Messages postés
169
Date d'inscription
samedi 10 décembre 2005
Statut
Membre
Dernière intervention
18 juin 2017

Bonjour Gobillot.

J'ai testé le Simulateur de tirages du Loto
en remplaçant la fonction Rnd de Visual Basic
par la tienne que tu appelles Wrnd().
Maintenant on constate par exemple que pour 1.400.000.000
tirages de 6 n°,l'erreur relative entre la théorie et la simulation n'est que de 10 à 15 pour cent quelles que soient
les combinaisons à 6 n° choisies.
Bien sûr en augmentant le nombre de tirages de 6 n°
cette erreur relative doit diminuer encore.
Je vais essayer avec 14.000.000.000 tirages pour le constater.
Merci encore pour ta fonction.
A plus
Messages postés
169
Date d'inscription
samedi 10 décembre 2005
Statut
Membre
Dernière intervention
18 juin 2017

Bonjour Gobillot.

Merci pour ta fonction Wrnd() de période 2^48.
C'est avec plaisir que je vais la tester.
Ca va être bien de constater que la sortie des
combinaisons à six numéros colle enfin plus à la théorie.
A bientôt avec les résultats du test.
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
27
et aussi de remplacer la fonction Rnd() par une fonction perso
par exemple celle-ci de fréquence 2^48 (donc plus de possibilités)
il suffit de remplacer les Rnd() par WRnd()

Dim WW0 As Currency
Dim WWA As Currency
Dim WWC As Currency
Dim WWM As Currency

Private Sub Form_Load()
WW0 = 28002971
WWA = 32353
WWC = 6534
WWM = 28147497671.0656
End Sub

Private Function WRnd() As Double
Dim x As Currency
x = WWA * WW0 + WWC
WWC = Int(x / WWM)
WW0 = x - WWC * WWM
WRnd = WW0 / WWM
End Function
Afficher les 19 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.