[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-gsl] accessing random number generator from functions
From: |
Nathan Moore |
Subject: |
[Help-gsl] accessing random number generator from functions |
Date: |
Mon, 22 Nov 2004 21:45:28 -0600 |
This is a general question about the scope of random number generators.
If I declare and initialize a random number generator (named "dice")
within the main function, how can I get numbers from "dice" if I'm in a
sub-function? Do I need to pass "dice" somehow?
Specific example follows. Would appreciate any constructive comments.
regards,
Nathan Moore
University of Minnesota
eg, if I have the main function,
- - - - -
#define RANDOM_SEED 53
int main (void)
{
/* allocate an instance of the random number generator */
gsl_rng * dice = gsl_rng_alloc (gsl_rng_mt19937);
/* seed the generator */
gsl_rng_set( dice, (long)RANDOM_SEED );
/* generate a few doubles with the generator */
int i,i_limit=1000000;
double ave_x=0.0;
for(i=0;i<i_limit;i++) {
x = gsl_rng_uniform(dice);
ave_x+=x;
}
printf("average over %ld numbers was
%lf\n",i_limit,ave_x/(double)i_limit);
/* free up memory that the generator uses */
gsl_rng_free (dice);
return 0;
}
- - - - -
How should the following code be phrased to use dice, but calculate the
average within a function? (the code below DOESN'T work)
- - - -
#define RANDOM_SEED 53
double calculate_average( long num_terms);
double calculate_average( long num_terms)
{
int i;
double ave_x=0.0;
for( i=0; i<num_terms; i++) {
x = gsl_rng_uniform(dice);
ave_x += x;
}
return ave_x/(double)num_terms;
}
int main (void)
{
/* allocate an instance of the random number generator */
gsl_rng * dice = gsl_rng_alloc (gsl_rng_mt19937);
/* seed the generator */
gsl_rng_set( dice, (long)RANDOM_SEED );
/* generate a few doubles with the generator */
double ave_x;
long num_terms=1000000;
ave_x = calculate_average(num_terms);
printf("average over %ld numbers was %lf\n",num_terms,ave_x);
/* free up memory that the generator uses */
gsl_rng_free (dice);
return 0;
}
- [Help-gsl] accessing random number generator from functions,
Nathan Moore <=