rand() generating the same number – even with srand(time(NULL)) in my main!

Posted by Nick Sweet on Stack Overflow See other posts from Stack Overflow or by Nick Sweet
Published on 2010-06-13T15:18:36Z Indexed on 2010/06/13 15:22 UTC
Read the original article Hit count: 744

Filed under:
|
|
|

So, I'm trying to create a random vector (think geometry, not an expandable array), and every time I call my random vector function I get the same x value, thought y and z are different.

int main () {
srand ( (unsigned)time(NULL));
Vector<double> a;
a.randvec();
cout << a << endl;
return 0;
}

using the function

//random Vector
template <class T>
void Vector<T>::randvec()
{
const int min=-10, max=10;
int randx, randy, randz;

const int bucket_size = RAND_MAX/(max-min);

do randx = (rand()/bucket_size)+min;
while (randx <= min && randx >= max);
x = randx;

do randy = (rand()/bucket_size)+min;
while (randy <= min && randy >= max);
y = randy;

do randz = (rand()/bucket_size)+min;
while (randz <= min && randz >= max);
z = randz;
}

For some reason, randx will consistently return 8, whereas the other numbers seem to be following the (pseudo) randomness perfectly. However, if I put the call to define, say, randy before randx, randy will always return 8.

Why is my first random number always 8? Am I seeding incorrectly?

© Stack Overflow or respective owner

Related posts about c++

Related posts about random