Soyez le premier à donner votre avis sur cette source.
Snippet vu 3 266 fois - Téléchargée 31 fois
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
Pour helkanen les opérateur And Or et Not sont des opérateurs logique.Si tu veux juste avoir l'explication booléenne fait F1 en le selectionnant c'est très bien expliquer ds l'aide. Sinon ca s'applique aussi a des entiers il suffit d'appliquer bit à bit l'operateur sur chacun des 2 operandes:
par exemple :
10010011
OR 01010010
-------------
11010011
Il y a aussi sous VB les opérateurs Imp Xor et Not(un seul opérande) je crois que c tout
Genre : c1 = a*c0 + b
c0 est le premier nombre, il permet de creer c1, puis on reinjecte c1 dans la formule : c2 = a*c1 + b
Ainsi, seul le premier nombre a besoin de tickCount (ce qui est une bonne graine de départ).
!!! Attention !!!
a et b ne peuvent etre choisis n'importe comment, faites des essais, vous verrez bien :o). Le mieux serait de prendre des nombres premiers.
De plus, un bon truc tout simple pour eliminer les repetitions est de calculer un resultat beaucoup plus grand que l'ecart voulu, et de le ramener a l'ecart par un modulo :
ecart (0-10)
resultat (0-16000)
ainsi, meme si on a que des chiffres proches les uns des autres, on obtiendra un nombre aleatoire different :o)
Je vais tacher de retrouver le site qui expliquait tout ca :o)
c'est pas mal ce truc...
et si j'ai bien compris, X c'est par exemple gettickcount ?
parce que si c'est ça, il reste juste un problème (qui ne se posait peut etre pas à toi), c'est qu'en faisant 2 nombres aléatoires en moins d'une ms (très probable), et ben... on a pas deux nombres aléatoires, mais égaux...
par contre (eh oui, je suis encore presque un newbie...), euh j'aimerais bien savoir comment fonctionnent les opérateurs booléens (And, Or, Not..) avec des nombres... comme dans l'exelmple ci-dessus... et à quoi ils servent.
bon ben sur ce...
bonne prog à vous
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.