Random(Quad) impossible

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Random(Quad) impossible

Message 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 8)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Random(Quad) impossible

Message 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)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Random(Quad) impossible

Message 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
Avatar de l’utilisateur
Naheulf
Messages : 191
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Random(Quad) impossible

Message 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().
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Re: Random(Quad) impossible

Message par SPH »

il faut mieux utiliser les fonctions CryptRandom() et CryptRandomData().
Je ne connaissais pas ces instructions :idea:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Répondre