Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Drand48() returning same random numbers each time

  1. Oct 28, 2008 #1


    User Avatar

    I'm getting some curious behavior when I call the pseudo-random number generator drand48(). The program is supposed to generate random cartesian coordinates for N points in three dimensions (where N is a command-line input). When run, the code does what it is supposed to: return N points with random coordinates.

    However, if I run the code again, I get the SAME values for the coordinates! If I recompile the code and run it again, the same thing happens.

    Here's the relevant part of the code:

    Code (Text):
    numPoints = atoi(argv[1]);

     for (i = 0; i <numPoints; i++) {
       Xrand = (2.*0.314159265)*drand48();
       Yrand = (2.*0.314159265)*drand48();
       Zrand = (2.*0.314159265)*drand48();
       Radius = sqrt(Xmod*Xmod+Ymod*Ymod+Zmod*Zmod);
       printf("%.5f %.5f %.5f %.5f\n",Xmod,Ymod,Zmod,Radius);
    The output looks something like this (e.g. for 5 points):

    Code (Text):

    -0.31416 -0.31354 -0.28800 0.52910
    -0.20317 -0.08507 -0.25677 0.33830
    -0.25617 -0.00803 0.01681 0.25684
    -0.02863 -0.16765 0.20816 0.26880
    0.27126 0.04276 0.03525 0.27687
    each time I run the program (and for any number of points these are the same).

    Can anyone offer some insight? I've tried to find on-line samples of drand48() usage, but to no avail.
  2. jcsd
  3. Oct 28, 2008 #2


    User Avatar
    Science Advisor
    Homework Helper

    That's what it's supposed to do - otherwise there would be no way of testing it.
    If you want a different sequence you need to seed() the generator with a different start number each time.
  4. Oct 28, 2008 #3

    Dr Transport

    User Avatar
    Science Advisor
    Gold Member

    try srand(time(0)); at the top of the main function.........
  5. Oct 28, 2008 #4


    User Avatar
    Science Advisor
    Homework Helper

    It might be seed48() for the rand48() library.

    The important point is that rand doesn't really return random numbers - thats impossible with an algorithm, it just returns a long list of non-repeating numbers with no pattern.
    To generate a different list you call seed() with a different starting value.
  6. Oct 28, 2008 #5
    A quick caution.

    If you want to run your program (or maybe a function that does this part of your program) many times in rapid succession, don't use the time(0) function to seed the generator. It will be called to close together, and the numbers in the sequences from the different runs will not be independent. This can really mess up any statistics you might perform.

Share this great discussion with others via Reddit, Google+, Twitter, or Facebook