1. ## Uniform sampling

Hi

My goal is to build a C function that perform a uniform sampling. I mean that I have a big file with a lot of data and I'd like to take just some data samples accordly the uniform distribution.

Es.
file1: a b c d e f g h i l m n o p q

An example would be to flip a coin for each letter and select all letters
for which the coin showed the head.

I have used the srand() system call, but it is not uniform.
Can anyone suggest a way to start?
Thanks

D

2. rand() (not srand()) is uniform, but not necessarily on the range you want it to be on.

But, in terms of drawing from a file, you need to choose every line, not necessarily 50-50, but in the ratio (number needed to still be drawn)/(number still in the file).

3. hi

a=rand();

I get a number uniformly distribuited between 0 and RAND_MAX

D

4. Don't forget to seed rand() using srand() or something similar. Time is always a good bet for a seed. If you want to flip a coin, do this:

Code:
`a = (int) (rand() / RAND_MAX + 0.5)`
This will either give a 0 or a 1, with equal probability.

5. Originally Posted by Dedalus
An example would be to flip a coin for each letter and select all letters for which the coin showed the head.
To be clear, that is not uniform sampling. That is Poisson sampling.

6. This will either give a 0 or a 1, with equal probability.
No, that will give zero with 100% probability.

You need to cast one of the division operands to get the result you are looking for:
Code:
`a = (int) ((double)rand() / RAND_MAX + 0.5)`

7. Have you checked the FAQ. Prelude wrote a well written article on it here.