Ben...
en fait je suis tombé sur une source très récente qui annonçait :
PORJET GALEA (GENRATEUR DE NOMBRE ALEATOIRE!!!! SANS RND!)
(vous pouvez chercher)
et en fait ça marchait pas bien son truc.
alors j'ai fait un bidule (ouéouéoué, truc bidule) petit à petit en changeant son code, et maintenant, on a un générateur de nombre aléatoire à peu près correct dont la moyenne sur 10000 lancers varie entre 0.499 et 0.500
Source / Exemple :
Dim a As Long
Dim b As Long
'variant est plus gros que Long, Double ou Currency et facile à manier...
Dim alea1 As Variant
Dim alea2 As Variant
Dim alea As Variant
'renvoie l'heure système à la ms près sous forme de Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
'à invoquer impérativement avant de "randomizer"
Public Function initRnd()
a = GetTickCount() Mod &HF + 1
b = GetTickCount() Mod &H1000 + 1
End Function
'la fonction d'appel de "randomisation"
Public Function getRnd() As Variant
'b
If b <= 0 Then
b = GetTickCount Mod &H1000 + 1
Else
b = b - 1
End If
If b <= 0 Then b = 5547
'a
If a >= 17 Then
a = GetTickCount Mod &HF + 1 'max 17
Else
a = a + 1
End If
If a <= 0 Then a = 11 'pris au "hasard"
'alea1
alea1 = b ^ a * Sqr(b / a + 2) ^ 3
While alea1 > 100
alea1 = alea1 / 10
Wend
alea1 = alea1 - Int(alea1)
'en fait, ici je ne prends pas le deuxième chiffre de alea1 car il est trop souvent le même d'un jet à l'autre, et si je prenais le premier chiffre, alors je n'aurais pas de valeur inférieure à 0.1...
'alea2
alea2 = b ^ a * Sqr(a / b + 2) ^ 3
While alea2 > 100
alea2 = alea2 / 10
Wend
alea2 = alea2 - Int(alea2)
alea = (alea1 + alea2) / 2
getRnd = alea
End Function
Conclusion :
évidemment c'est toujours pas le meilleur générateur qui existe, mais celui-ci tient la route...
allez bonne prog !
Helkanen
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.