Générateur aléatoire sans rnd - avec gettickcount

Contenu du snippet

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

A voir également

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.