Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2498 connectés 

  FORUM HardWare.fr
  Programmation
  C

  randomiser un large_integer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

randomiser un large_integer

n°1034659
red factio​n
Posté le 04-04-2005 à 19:00:30  profilanswer
 

jaimerai initialiser un large_integer avec du random  
 
pour linstant je fait comme ceci  
 

Code :
  1. foobar.LowPart =rand()<<15^rand();   
  2.     foobar.HighPart =rand()<<15^rand();


 
deplus il faut que se nombre soit un multiple de 512


Message édité par red faction le 04-04-2005 à 19:00:43
mood
Publicité
Posté le 04-04-2005 à 19:00:30  profilanswer
 

n°1034668
Taz
bisounours-codeur
Posté le 04-04-2005 à 19:08:23  profilanswer
 

c'est pas terrible, vu que les 4 valeurs de rand() sont liés de très près ...  
 
tu veux que ça soit un multiple de 512 ? ben sur ta LowPart, tu fais un un petit & 0xfffffe00 ?
 
 
NB : en C99 tu as le types 'long long' qui serait sans doute plus facile à utiliser.

n°1034677
red factio​n
Posté le 04-04-2005 à 19:21:50  profilanswer
 

Code :
  1. typedef long long U64;
  2. U64 rand64(void){
  3.     return rand() ^ ((U64)rand() << 15) ^ ((U64)rand() << 30) ^ ((U64)rand() << 45) ^ ((U64)rand() << 60);
  4. }
  5. U64 foo= rand64() & 0xfffffe00;


bon apparament ca reste crade vu que ya tjs 4 rand de suite :/ a moins quil existe un autre rand64 deja implementé
 
edit  : je viens de me rendre compte que le &0xff.. etait peut etre mal placé


Message édité par red faction le 04-04-2005 à 19:25:54
n°1034682
Taz
bisounours-codeur
Posté le 04-04-2005 à 19:25:59  profilanswer
 

tu peux utiliser uint64_t si tu aimes :D
 
0xfffffe00 -> 0x00000000fffffffe00ULL

n°1034688
Taz
bisounours-codeur
Posté le 04-04-2005 à 19:34:05  profilanswer
 

moi je serais d'avis d'utiliser autre chose que rand(). Mais pas en standard. Déjà que 15bits, c'est parceque sur vos systèmes RAND_MAX est comme ça ...
 
Certains systèmes proposent lrand48() qui est déjà un peu mieux. Sinon, un bon vieux read() sur /dev/random et hop :


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  randomiser un large_integer

 

Sujets relatifs
augmenter la large pool sous oracle 9i[C][Debutant] makes integer from pointer without a cast
contenaire a 100% de haut et de large ????prob avec settype (integer)
[HTML] Tableau trop large et espace non voulu sous son image [Résolu]is_integer
Deuxieme question : fonction avec is_integer()pb de conversion string en Integer puis int
[Shell] Comment savoir si une variable est du type "integer" ??assignment makes pointer from integer without a cast ???? [ Résolu ]
Plus de sujets relatifs à : randomiser un large_integer


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)