Drand48() returning same random numbers each time

Click For Summary

Discussion Overview

The discussion centers around the behavior of the pseudo-random number generator drand48() in a program designed to generate random Cartesian coordinates in three dimensions. Participants explore the reasons for the generator returning the same values across multiple runs of the program and suggest potential solutions.

Discussion Character

  • Technical explanation
  • Exploratory
  • Debate/contested

Main Points Raised

  • One participant notes that the program consistently returns the same random coordinates upon each run, indicating a lack of variability in the output.
  • Another participant suggests that to achieve different sequences of random numbers, the generator must be seeded with a different starting number each time.
  • A suggestion is made to use srand(time(0)); at the beginning of the main function to seed the generator with the current time.
  • Another participant mentions that it might be necessary to use seed48() for the rand48() library to achieve the desired variability.
  • One participant cautions that using time(0) for seeding in rapid successive runs may lead to non-independent sequences, potentially affecting statistical outcomes.

Areas of Agreement / Disagreement

Participants generally agree that seeding the generator is necessary for different outputs, but there are differing opinions on the best method to achieve this and the implications of using certain seeding techniques.

Contextual Notes

There is an implicit assumption that the behavior of drand48() is understood among participants, and the discussion does not resolve the best practices for seeding in all scenarios.

A/4
Messages
56
Reaction score
3
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:
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:
-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.
 
Technology news on Phys.org
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.
 
try srand(time(0)); at the top of the main function...
 
It might be seed48() for the rand48() library.

The important point is that rand doesn't really return random numbers - that's 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.
 
Dr Transport said:
try srand(time(0)); at the top of the main function...

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.

John
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
Replies
22
Views
5K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 9 ·
Replies
9
Views
3K
Replies
11
Views
2K
  • · Replies 17 ·
Replies
17
Views
4K
  • · Replies 4 ·
Replies
4
Views
2K
Replies
1
Views
2K