Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Modification de la fonction RandomValue dans KGF.dll Ven 18 Jan 2013 - 10:59 | |
| Suite à une remarque par message privé, j'ai légèrement modifié le fonctionnement de RandomValue.
Rappelons que cette fonction retourne une valeur entière aléatoire entre 0 et une valeur maximale.
Or, il s'avère que si la distribution des nombres tirés est bien conforme à ce qu'on attent d'un tirage aléatoire, il n'en est pas de même lors de lancements successifs: en fait, on peut retomber dans la même séquence de nombres tirés.
J'ai donc ajouté la possibilité de passer une valeur négative quelconque comme valeur maximale. Et cela provoque la réinitialisation de la base de calcul. Je suggère donc de faire systématiquement un appel avec le paramètre (-1) en début de programme, avant le premier vrai tirage. De façon interne, la routine utilise alors la fonction RANDOMIZE de Delphi pour créer une nouvelle base de calcul aléatoire.
| |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Modification de la fonction RandomValue dans KGF.dll Ven 18 Jan 2013 - 11:29 | |
| Merci Klaus (PS: une question sans doute idiote, mais pourquoi ne pas inclure un pseudo appel avec -1 dans la DLL pour avoir un tirage forcément aléatoire ? Cela entrainerait une réelle baisse de performance ?) | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Modification de la fonction RandomValue dans KGF.dll Ven 18 Jan 2013 - 12:26 | |
| Non, pas vraiment. Mais cela correspond au fonctionnement des routines de Rnd et Randomize de Delphi. L'idée à la base, c'est de pouvoir disposer un jeu de valeurs pour des tests, globalement aléatoire, mais dont l'ordre est connu et reproductible. Dans KGF_SUB, j'ai habillé l'appel à la fonction RandomValue par une procédure RandomValue, dont voici le source: - Code:
-
' ==== res% = DLL_call1("RandomValue",maxi%) sub RandomValue(maxi%) if variable("RandomValue")=0 then dim RandomValue KGF_res% = DLL_call1("RandomValue",maxi%) RandomValue = KGF_res% end_sub
Tu peux facilement définir ta propre procédure MyRandomValue, de cette manière: - Code:
-
sub MyRandomValue(maxi%) RandomValue(-1) RandomValue(maxi%) end_sub
| |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Modification de la fonction RandomValue dans KGF.dll Ven 18 Jan 2013 - 13:13 | |
| C'est sûr Ca peut en effet être pratique aussi et ce n'est pas sorcier à mettre en oeuvre. | |
|
Contenu sponsorisé
| Sujet: Re: Modification de la fonction RandomValue dans KGF.dll | |
| |
|