randomiser un large_integer

randomiser un large_integer - C - Programmation

Marsh Posté le 04-04-2005 à 19:00:30    

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
Reply

Marsh Posté le 04-04-2005 à 19:00:30   

Reply

Marsh Posté le 04-04-2005 à 19:08:23    

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.

Reply

Marsh Posté le 04-04-2005 à 19:21:50    

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
Reply

Marsh Posté le 04-04-2005 à 19:25:59    

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

Reply

Marsh Posté le 04-04-2005 à 19:34:05    

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 :

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed