1. Welcome to TechPowerUp Forums, Guest! Please check out our forum guidelines for info related to our community.

Need help: rand() C always returns 0

Discussion in 'Programming & Webmastering' started by silentbogo, Jan 30, 2014.

  1. silentbogo

    silentbogo

    Joined:
    Nov 20, 2013
    Messages:
    1,223 (1.25/day)
    Thanks Received:
    1,254
    Location:
    Dark and creepy attic
    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:

    Code:
    #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;
    }
    
     
  2. W1zzard

    W1zzard Administrator Staff Member

    Joined:
    May 14, 2004
    Messages:
    16,259 (3.65/day)
    Thanks Received:
    14,936
    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 says thanks.
    10 Year Member at TPU
  3. silentbogo

    silentbogo

    Joined:
    Nov 20, 2013
    Messages:
    1,223 (1.25/day)
    Thanks Received:
    1,254
    Location:
    Dark and creepy attic
    Thx W1zzard! Had to change the type to int and it worked.
    The actual calculation is:
    Code:
    x = 2*rand()/RAND_MAX - 1;
    
    I'm trying to generate numbers between -1 and 1 for multithreaded version of Monte Carlo algorithm.
     

Currently Active Users Viewing This Thread: 1 (0 members and 1 guest)