# Need help: rand() C always returns 0



## silentbogo (Jan 30, 2014)

I'm using Code::Blocks to write the code and rand() function always return 0.
I tried to plant the seed with srand(time(NULL)), srand(opm_get_wtime()) and at least 10 different other methods, but it does not work...

Does anybody know how to fix this?

The general outline of my code looks like this:


```
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>

int main()
{
    int toss;
    int number_in_circle = 0;
    int number_of_tosses = 10;
    double distance_squared;
    double x;
    double y;
    srand(time(NULL));
    for (toss=0;toss<number_of_tosses;toss++)
    {
        x = rand()/RAND_MAX - 1;
        y = rand()/RAND_MAX - 1;
        printf("x=%f",x);
        printf("y=%f\r\n",y);
        distance_squared = x * x + y * y ;
        if ( distance_squared <= 1) number_in_circle++;
    }
    int pi_estimate = 4*number_in_circle /((double) number_of_tosses );
    printf("Pi estimate: %d",pi_estimate);
    return 0;
}
```


----------



## W1zzard (Jan 30, 2014)

what's with the -1 there? and why isn't it in ( ) together with RAND_MAX ?
also rand() returns an int, which you might want to cast to a double, so that division works as you assume it to work


----------



## silentbogo (Jan 30, 2014)

W1zzard said:


> what's with the -1 there? and why isn't it in ( ) together with RAND_MAX ?
> also rand() returns an int, which you might want to cast to a double, so that division works as you assume it to work


Thx W1zzard! Had to change the type to int and it worked. 
The actual calculation is:

```
x = 2*rand()/RAND_MAX - 1;
```
I'm trying to generate numbers between -1 and 1 for multithreaded version of Monte Carlo algorithm.


----------

