# Thread: Rand() questions

1. "the above will produce trully random values of 1 -10."

First of all, they are pseudo random numbers, and your method reduces their "randomness" because it effectively truncates the value returned from rand() to a few low order bits, which are not necessarily random because of the way pseudo random numbers are generated, so it's commonly villified as a poor method.

2. "Im so confused yes i did go to the links but can some one simplify the srand and time i dont get it"

Ok, to get random numbers, you need to start with a seed for the random number generator. However, if your seed isn't random, then the numbers won't be random. It's kind of a catch-22.

time(0) returns the current time in seconds from your system clock, so it's pretty random, and seems like a good way to seed the random number generator.

You don't need to understand any of that. Just do this once in your program:

srand(static_cast<unsigned>(time(0)));

before you use rand(), and you should be ok. However, I still find that if I run the program a few seconds later, I still get the same random number for the first number of a series of numbers, so it still isn't a fool proof system.

3. Originally posted by dsig111
[B]the srand function sets a seed to randomize off of and when using time to do it it will set the seed different ly each time and stop using % 11 it returns 0-10 snd when add 1 it returns 1-11...
if thats true how come in my program it stoped a ten. Thanks guy i fixed my problem

4. Code:
```time_t seconds;
time(&seconds);
srand((unsigned int) seconds);
int rnd;
rnd=(rand() % 10+1);```

5. The rand() function does not return a random number , it returns a pseudo-random number. This is evident when you get the same "random" number sequence every time you run your program. The way to prevent this is to seed the random number generator to produce a different sequence of random numbers. The srand() function seeds the random number generator to the given number. However, if you set the generator to the same seed number every time, you will still get the same sequence of random numbers. That is where the time comes in. Seeding the random number based on the time will give you the best randomness. A simple example:

Code:
```#include <iostream>
#include <cstdlib>
#include <ctime>
//Notice the use of C++ headers

using namespace std;

int main() {

//Seed random number generator based on time
srand(time(NULL));

for(int i = 0;i < 10;i++)
cout <<rand() <<endl;

}```
Notice that it will most likely print off 10 really big numbers. Usually we only want to work with much smaller numbers, like 0-2(for 3 different outcomes). That's where the modulus operator(%) comes in. Hope that helps a little.

Popular pages Recent additions