2016-04-03 18 views
0

Isaac kullanarak rastgele sayı üretmek için aşağıdaki kodu vardır:ISAAC rasgele sayı üreteci için tohum temini nasıl

Ben How to use ISAAC in C

Yukarıdaki kodu var

int main() 
{ 
    /* Initialize the structure to 0 */ 
    randctx ctx; 
    ctx.randa = ctx.randb = ctx.randc = (ub4)0; 

    /* Initialize the seed */ 
    for (ub4 i=0; i<256; ++i) { 
     ctx.randrsl[i] = i; 
    } 

    /* Initialize the random numbers from the seed */ 
    randinit(&ctx, TRUE); 

    printf("%.8lx\n", rand(&ctx)); 
} 

Ben de okumak için bir kod var/dev/random from to tohum:

int myFile = open("/dev/random", O_RDONLY);    
uint32_t rand;    
uint32_t randomNum = read(myFile, &rand, sizeof(rand)) ; 
printf(" %u \n", rand); 
close(myFile); 

Tohum, yani ISAAC'a nasıl vereceğim?

Teşekkür

cevap

1

tohum ctx.randrsl alınır randinit bayraklarıyla için TRUE geçen. Ama Yani 256

onun değerini RANDSIZ veya sizeof(ctx.randrsl) kullanarak yerine hardcoding öneriyoruz:

ssize_t bytes_read = read(myFile, &ctx.randrsl, sizeof(ctx.randrsl)); 
if(bytes_read != sizeof(ctx.randrsl)){ printf("cannot initialize seed\n"); exit(1); } 
+0

Çok teşekkürler Cevabınız için! Ben her zaman tohumu başlatamazdım. Görünen o ki, bytes_read'in büyüklük (ctx.randrsl) değerine eşit olması olasılığı oldukça düşüktür. Bu sorunu çözmenin bir yolu var mı? – user3266083

+0

@ user3266083 sadece dosyadaki baytları okur, bu sadece olağandışı durumlarda başarısız olur. 'MyFile' başarıyla açıldı mı (> = 0 olmalıdır)? – Vasfed

+0

Evet dosya başarıyla açıldı. Ve sadece FYI bunu Linux VM'de çalıştırıyorum. – user3266083