vendredi 19 février 2016

Calculate dynamic range of rand with mod

I want to create a rand() range between 1 and the dynamic value of bit_cnt.

After reading more about the rand() function, I understand that out of the box rand() has a range of [0, RAND_MAX]. I also understand that RAND_MAX's value is library-dependent, but is guaranteed to be at least 32767.

I had to create a bit mask of 64 0s.

Now, I am trying to left shift the bit mask by a dynamic value of bit_cnt anded with the a randomly generated number of bits between 1 and the dynamic value of bit_cnt.

Originally, I had

mask = (mask << bit_cnt) + (rand()% bit_cnt);

which caused a floating point exception. From what I am understanding, that exception occurred because the value of bit_cntbecame 0.

Therefore, I attempted to create an if statement like this:

if((rand()%bit_cnt))!=0){
 mask = (mask << bit_cnt) + (rand()% bit_cnt);
}

,but the floating point exception still occurred.

Then I tried the following thinking that the value not be 0 so increase the value to at least 1:

mask = (mask << bit_cnt) + ((rand()% bit_cnt)+1);

,but the floating point exception still occurred.

Afterwards, I tried the following:

mask = (mask << bit_cnt) + (1+(rand()%(bit_cnt+1)));

and the following 20 lines of 64 bits outputted:

0000000000000000000000000000000000000000000000000000000000000010
0000000000000000000000000000000000000000000000000000000000000011
0000000000000000000000000000000000000000000000000000000000000101
0000000000000000000000000000000000000000000000000000000000001010
0000000000000000000000000000000000000000000000000000000000010011
0000000000000000000000000000000000000000000000000000000000100011
0000000000000000000000000000000000000000000000000000000001000110
0000000000000000000000000000000000000000000000000000000010000100
0000000000000000000000000000000000000000000000000000000100001001
0000000000000000000000000000000000000000000000000000001000000010
0000000000000000000000000000000000000000000000000000010000000100
0000000000000000000000000000000000000000000000000000100000000111
0000000000000000000000000000000000000000000000000001000000000101
0000000000000000000000000000000000000000000000000010000000001001
0000000000000000000000000000000000000000000000000100000000000111
0000000000000000000000000000000000000000000000001000000000001111
0000000000000000000000000000000000000000000000010000000000001010
0000000000000000000000000000000000000000000000100000000000000101
0000000000000000000000000000000000000000000001000000000000001101
0000000000000000000000000000000000000000000010000000000000001100

What was the cause of the floating point exception? Is this how to dynamic create a range of the rand() function?

I appreciate any suggestions. Thank you.




Aucun commentaire:

Enregistrer un commentaire