Page 1 sur 1
Random(Quad) impossible
Publié : dim. 04/août/2019 23:59
par SPH
Salut,
savez-vous pourquoi un Random(65536*32768-1) est le plus grand que l'on puisse faire ?
Hélas, il n'existe pas de RandomQ(Quad)
Avez vous une solution ?
Thxxx

Re: Random(Quad) impossible
Publié : lun. 05/août/2019 9:46
par Ollivier
Une méthode sommaire pour remplir 64 bits au "hasard":
Code : Tout sélectionner
Define.Q X
x = random($FFFFFFF) << 36
x + random($FFFFFFF) << 8
X + Random($FF)
Re: Random(Quad) impossible
Publié : lun. 05/août/2019 22:09
par djes
Petite solution naïve
Code : Tout sélectionner
SizeOfInteger.i = 8 * 4 ; 8 bits sur 4 octets
MaxInteger.i = Pow(2, SizeOfInteger)
;MaxInteger - 1 ; Bug : impossible de soustraire 1 ci-dessus si on met 8 octets à la place de 4 ;)
Debug "Plus grand nombre entier "
Debug MaxInteger
SizeOfFloat.i = 8 * 4
MaxFloat.i = Pow(2, SizeOfFloat)
Unit.d = 1.0 / MaxFloat
Debug "Plus petit nombre flottant "
Debug Unit
Debug "---"
For i = 0 To 100
FP.d = Unit * Random(MaxFloat)
UP.d = Random(MaxInteger)
DRnd.d = UP + FP
Debug DRnd
Next
Re: Random(Quad) impossible
Publié : mar. 17/sept./2019 8:00
par Naheulf
Même si un quad reste relativement "petit", cela ne vaudrait pas le coup de passer par la fonction
RandomData() ?
Code : Tout sélectionner
; Pour un nombre
Define nombre.q
RandomData(@nombre, SizeOf(Quad))
Debug RSet(Hex(nombre, #PB_Quad),2*SizeOf(Quad), "0")
; Pour un tableau de nombres
#DIM_TABLEAU = 1000
Dim hazard.q(#DIM_TABLEAU)
RandomData(@hazard(0), (#DIM_TABLEAU+1)*SizeOf(Quad))
For i = 0 To #DIM_TABLEAU
Debug RSet(Hex(hazard(i), #PB_Quad),2*SizeOf(Quad), "0")
Next
Pour utiliser les valeurs aléatoires à des fins de chiffrement il faut mieux utiliser les fonctions
CryptRandom() et
CryptRandomData().
Re: Random(Quad) impossible
Publié : mar. 17/sept./2019 10:41
par SPH
il faut mieux utiliser les fonctions CryptRandom() et CryptRandomData().
Je ne connaissais pas ces instructions
