random_GFSR_table_get

Retrieves the current table used in the GFSR generator.

Synopsis

#include <imsls.h>

void imsls_random_GFSR_table_get (int **table, ..., 0)

Required Arguments

int **table (Output)
Address of a pointer to an array of length 1565 containing the table used in the GFSR generators. Typically, int *table is declared and &table is used as an argument.

Synopsis with Optional Arguments

#include <imsls.h>

void imsls_random_GFSR_table_get (int **table,
IMSLS_RETURN_USER, int r[],
0)

Optional Arguments

IMSLS_RETURN_USER, int r[] (Output)
User-supplied array of length 1565 containing the table used in the GFSR generators.

Description

Function imsls_f_random_GFSR_table_get retrieves the current table used in the GFSR generator. A reason for doing this would be to restart a simulation, using function imsls_f_random_GFSR_table_set to reset the table. To restart a simulation using a GFSR generator, both the seed and the table must be reset (see example). The tables for the GFSR generators are separate for single and double precision, so, if precisions are mixed in a program, it is necessary to manage each precision separately for the GFSR generators.

Example

In this example, three separate simulation streams are used, each with a different form of the generator. Each stream is stopped and restarted. (Although this example is obviously an artificial one, there may be reasons for maintaining separate streams and stopping and restarting them because of the nature of the usage of the random numbers coming from the separate streams.)

 

#include <imsls.h>

#include <stdio.h>

 

int main()

{

float *r, *table;

int nr, iseed1, iseed2, iseed7;

int *itable;

 

nr = 5;

iseed1 = 123457;

iseed2 = 123457;

iseed7 = 123457;

 

/* Begin first stream, iopt = 1 (by default) */

imsls_random_seed_set (iseed1);

 

r = imsls_f_random_uniform (nr,

0);

 

iseed1 = imsls_random_seed_get ();

 

imsls_f_write_matrix ("First stream output", 1, 5, r,

IMSLS_NO_COL_LABELS,

IMSLS_NO_ROW_LABELS,

0);

 

printf(" Output seed\t%d\n\n", iseed1);

 

imsls_free(r);

 

/* Begin second stream, iopt = 2 */

imsls_random_option (2);

imsls_random_seed_set (iseed2);

 

r = imsls_f_random_uniform (nr,

0);

 

iseed2 = imsls_random_seed_get ();

 

imsls_f_random_table_get (&table,

0);

 

imsls_f_write_matrix ("Second stream output", 1, 5, r,

IMSLS_NO_COL_LABELS,

IMSLS_NO_ROW_LABELS,

0);

 

printf(" Output seed\t%d\n\n", iseed2);

 

imsls_free(r);

 

/* Begin third stream, iopt = 7 */

imsls_random_option (7);

imsls_random_seed_set (iseed7);

 

r = imsls_f_random_uniform (nr,

0);

 

iseed7 = imsls_random_seed_get ();

 

imsls_random_GFSR_table_get (&itable,

0);

 

imsls_f_write_matrix ("Third stream output", 1, 5, r,

IMSLS_NO_COL_LABELS,

IMSLS_NO_ROW_LABELS,

0);

 

printf(" Output seed\t%d\n\n", iseed7);

 

imsls_free(r);

 

/* Reinitialize seed and resume first stream */

imsls_random_option (1);

imsls_random_seed_set (iseed1);

 

r = imsls_f_random_uniform (nr,

0);

 

iseed1 = imsls_random_seed_get ();

 

imsls_f_write_matrix ("First stream output", 1, 5, r,

IMSLS_NO_COL_LABELS,

IMSLS_NO_ROW_LABELS,

0);

 

printf(" Output seed\t%d\n\n", iseed1);

 

imsls_free(r);

 

/* Reinitialize seed and table for shuffling and resume second

* stream */

imsls_random_option (2);

imsls_random_seed_set (iseed2);

imsls_f_random_table_set (table);

 

r = imsls_f_random_uniform (nr,

0);

 

iseed2 = imsls_random_seed_get ();

 

imsls_f_write_matrix ("Second stream output", 1, 5, r,

IMSLS_NO_COL_LABELS,

IMSLS_NO_ROW_LABELS,

0);

 

printf(" Output seed\t%d\n\n", iseed2);

 

imsls_free(r);

 

/* Reinitialize seed and table for GFSR and resume third stream. */

imsls_random_option (7);

imsls_random_seed_set (iseed7);

imsls_random_GFSR_table_set (itable);

 

r = imsls_f_random_uniform (nr,

0);

 

iseed7 = imsls_random_seed_get ();

 

imsls_f_write_matrix ("Third stream output", 1, 5, r,

IMSLS_NO_COL_LABELS,

IMSLS_NO_ROW_LABELS,

0);

 

printf(" Output seed\t%d\n\n", iseed7);

 

imsls_free(r);

}

Output

 

First stream output

0.9662 0.2607 0.7663 0.5693 0.8448

Output seed 1814256879

 

 

Second stream output

0.7095 0.1861 0.4794 0.6038 0.3790

Output seed 1965912801

 

 

Third stream output

0.3914 0.0263 0.7622 0.0281 0.8997

Output seed 1932158269

 

 

First stream output

0.0443 0.9872 0.6014 0.8964 0.3809

Output seed 817878095

 

 

Second stream output

0.2557 0.4788 0.2258 0.3455 0.5811

Output seed 2108806573

 

 

Third stream output

0.7519 0.5084 0.9070 0.0910 0.6917

Output seed 1485334679