c - using srand and rand, I am getting same number after few iteration -


i having problem of getting same number generation problem using rand , srand functions.

srand ((unsigned int) time (null));   unsigned int m_random1 = 96047236;   unsigned int m_random2 = 7955217;   unsigned int m_random3 = (1 + (int) (23445234.0 * rand()/(rand_max+1.0)));     // code provides me random number.`enter code here`   (unsigned int i= 0; i<20;i++) {     m_random3 = m_random1 * m_random3 + m_random2;     printf("m_random3 = %x, count = %d",m_random3, i);     printf ("\n"); } 

i getting same result (b2673e25) after iteration:

m_random3 = a832cbbd, count = 0 m_random3 = 39d9c085, count = 1 ..... ..... m_random3 = 4a673e25, count = 12 m_random3 = 12673e25, count = 13 m_random3 = 32673e25, count = 14 m_random3 = b2673e25, count = 15 m_random3 = b2673e25, count = 16 m_random3 = b2673e25, count = 17 m_random3 = b2673e25, count = 18 m_random3 = b2673e25, count = 19 

any body has idea why happening ??

this has nothing rand(). have implemented linear congruential generator (lcg) unsuitable constants. such generator calculates next number current value:

x[i + 1] = (a*x[i] + c) % m; 

in example, (inappropraiely named) random1 a, random2 c , m implicitly uint_max, because of modular behaviour of unsigned ints.

the wikipedia page doesn't provide method determine cycle length, has conditions largest cycle length, m:

  • c , m relatively prime: that's true, prime factors are

    a == 2 * 2 * 53 * 453053 c == 9 * 23 * 38431 
  • a - 1 divisible prime factors of m: m power of two, a even. a - 1 odd , not divisible 2.

  • a - 1 multiple of 4 if m multiple of 4: that's not true either.

you try using of constants given in wikipedia article. or use rand().


Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -