Blame rng/random.c

Packit 67cb25
/* rng/random.c
Packit 67cb25
 * 
Packit 67cb25
 * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 James Theiler, Brian Gough
Packit 67cb25
 * 
Packit 67cb25
 * This program is free software; you can redistribute it and/or modify
Packit 67cb25
 * it under the terms of the GNU General Public License as published by
Packit 67cb25
 * the Free Software Foundation; either version 3 of the License, or (at
Packit 67cb25
 * your option) any later version.
Packit 67cb25
 * 
Packit 67cb25
 * This program is distributed in the hope that it will be useful, but
Packit 67cb25
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 67cb25
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 67cb25
 * General Public License for more details.
Packit 67cb25
 * 
Packit 67cb25
 * You should have received a copy of the GNU General Public License
Packit 67cb25
 * along with this program; if not, write to the Free Software
Packit 67cb25
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Packit 67cb25
 */
Packit 67cb25
Packit 67cb25
#include <config.h>
Packit 67cb25
#include <stdlib.h>
Packit 67cb25
#include <gsl/gsl_rng.h>
Packit 67cb25
Packit 67cb25
/* This file provides support for random() generators. There are three
Packit 67cb25
   versions in widespread use today,
Packit 67cb25
Packit 67cb25
   - The original BSD version, e.g. on SunOS 4.1 and FreeBSD.
Packit 67cb25
Packit 67cb25
   - The Linux libc5 version, which is differs from the BSD version in
Packit 67cb25
   its seeding procedure, possibly due to the introduction of a typo
Packit 67cb25
   in the multiplier.
Packit 67cb25
Packit 67cb25
   - The GNU glibc2 version, which has a new (and better) seeding
Packit 67cb25
   procedure.
Packit 67cb25
Packit 67cb25
   They all produce different numbers, due to the different seeding
Packit 67cb25
   algorithms, but the algorithm for the generator is the same in each
Packit 67cb25
   case.
Packit 67cb25
  
Packit 67cb25
 */
Packit 67cb25
Packit 67cb25
static inline long int random_get (int * i, int * j, int n, long int * x);
Packit 67cb25
Packit 67cb25
static inline unsigned long int random8_get (void *vstate);
Packit 67cb25
static inline unsigned long int random32_get (void *vstate);
Packit 67cb25
static inline unsigned long int random64_get (void *vstate);
Packit 67cb25
static inline unsigned long int random128_get (void *vstate);
Packit 67cb25
static inline unsigned long int random256_get (void *vstate);
Packit 67cb25
Packit 67cb25
static double random8_get_double (void *vstate);
Packit 67cb25
static double random32_get_double (void *vstate);
Packit 67cb25
static double random64_get_double (void *vstate);
Packit 67cb25
static double random128_get_double (void *vstate);
Packit 67cb25
static double random256_get_double (void *vstate);
Packit 67cb25
Packit 67cb25
static void random8_glibc2_set (void *state, unsigned long int s);
Packit 67cb25
static void random32_glibc2_set (void *state, unsigned long int s);
Packit 67cb25
static void random64_glibc2_set (void *state, unsigned long int s);
Packit 67cb25
static void random128_glibc2_set (void *state, unsigned long int s);
Packit 67cb25
static void random256_glibc2_set (void *state, unsigned long int s);
Packit 67cb25
Packit 67cb25
static void random8_libc5_set (void *state, unsigned long int s);
Packit 67cb25
static void random32_libc5_set (void *state, unsigned long int s);
Packit 67cb25
static void random64_libc5_set (void *state, unsigned long int s);
Packit 67cb25
static void random128_libc5_set (void *state, unsigned long int s);
Packit 67cb25
static void random256_libc5_set (void *state, unsigned long int s);
Packit 67cb25
Packit 67cb25
static void random8_bsd_set (void *state, unsigned long int s);
Packit 67cb25
static void random32_bsd_set (void *state, unsigned long int s);
Packit 67cb25
static void random64_bsd_set (void *state, unsigned long int s);
Packit 67cb25
static void random128_bsd_set (void *state, unsigned long int s);
Packit 67cb25
static void random256_bsd_set (void *state, unsigned long int s);
Packit 67cb25
Packit 67cb25
static void bsd_initialize (long int * x, int n, unsigned long int s);
Packit 67cb25
static void libc5_initialize (long int * x, int n, unsigned long int s);
Packit 67cb25
static void glibc2_initialize (long int * x, int n, unsigned long int s);
Packit 67cb25
Packit 67cb25
typedef struct
Packit 67cb25
  {
Packit 67cb25
    long int x;
Packit 67cb25
  }
Packit 67cb25
random8_state_t;
Packit 67cb25
Packit 67cb25
typedef struct
Packit 67cb25
  {
Packit 67cb25
    int i, j;
Packit 67cb25
    long int x[7];
Packit 67cb25
  }
Packit 67cb25
random32_state_t;
Packit 67cb25
Packit 67cb25
typedef struct
Packit 67cb25
  {
Packit 67cb25
    int i, j;
Packit 67cb25
    long int x[15];
Packit 67cb25
  }
Packit 67cb25
random64_state_t;
Packit 67cb25
Packit 67cb25
typedef struct
Packit 67cb25
  {
Packit 67cb25
    int i, j;
Packit 67cb25
    long int x[31];
Packit 67cb25
  }
Packit 67cb25
random128_state_t;
Packit 67cb25
Packit 67cb25
typedef struct
Packit 67cb25
  {
Packit 67cb25
    int i, j;
Packit 67cb25
    long int x[63];
Packit 67cb25
  }
Packit 67cb25
random256_state_t;
Packit 67cb25
Packit 67cb25
static inline unsigned long int
Packit 67cb25
random8_get (void *vstate)
Packit 67cb25
{
Packit 67cb25
  random8_state_t *state = (random8_state_t *) vstate;
Packit 67cb25
Packit 67cb25
  state->x = (1103515245 * state->x + 12345) & 0x7fffffffUL;
Packit 67cb25
  return state->x;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static inline long int
Packit 67cb25
random_get (int * i, int * j, int n, long int * x)
Packit 67cb25
{
Packit 67cb25
  long int k ;
Packit 67cb25
Packit 67cb25
  x[*i] += x[*j] ;
Packit 67cb25
  k = (x[*i] >> 1) & 0x7FFFFFFF ;
Packit 67cb25
  
Packit 67cb25
  (*i)++ ;
Packit 67cb25
  if (*i == n)
Packit 67cb25
    *i = 0 ;
Packit 67cb25
  
Packit 67cb25
  (*j)++ ;
Packit 67cb25
  if (*j == n)
Packit 67cb25
    *j = 0 ;
Packit 67cb25
Packit 67cb25
  return k ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static inline unsigned long int
Packit 67cb25
random32_get (void *vstate)
Packit 67cb25
{
Packit 67cb25
  random32_state_t *state = (random32_state_t *) vstate;
Packit 67cb25
  unsigned long int k = random_get (&state->i, &state->j, 7, state->x) ; 
Packit 67cb25
  return k ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static inline unsigned long int
Packit 67cb25
random64_get (void *vstate)
Packit 67cb25
{
Packit 67cb25
  random64_state_t *state = (random64_state_t *) vstate;
Packit 67cb25
  long int k = random_get (&state->i, &state->j, 15, state->x) ; 
Packit 67cb25
  return k ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static inline unsigned long int
Packit 67cb25
random128_get (void *vstate)
Packit 67cb25
{
Packit 67cb25
  random128_state_t *state = (random128_state_t *) vstate;
Packit 67cb25
  unsigned long int k = random_get (&state->i, &state->j, 31, state->x) ; 
Packit 67cb25
  return k ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static inline unsigned long int
Packit 67cb25
random256_get (void *vstate)
Packit 67cb25
{
Packit 67cb25
  random256_state_t *state = (random256_state_t *) vstate;
Packit 67cb25
  long int k = random_get (&state->i, &state->j, 63, state->x) ; 
Packit 67cb25
  return k ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static double
Packit 67cb25
random8_get_double (void *vstate)
Packit 67cb25
{
Packit 67cb25
  return random8_get (vstate) / 2147483648.0 ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static double
Packit 67cb25
random32_get_double (void *vstate)
Packit 67cb25
{
Packit 67cb25
  return random32_get (vstate) / 2147483648.0 ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static double
Packit 67cb25
random64_get_double (void *vstate)
Packit 67cb25
{
Packit 67cb25
  return random64_get (vstate) / 2147483648.0 ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static double
Packit 67cb25
random128_get_double (void *vstate)
Packit 67cb25
{
Packit 67cb25
  return random128_get (vstate) / 2147483648.0 ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static double
Packit 67cb25
random256_get_double (void *vstate)
Packit 67cb25
{
Packit 67cb25
  return random256_get (vstate) / 2147483648.0 ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random8_bsd_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random8_state_t *state = (random8_state_t *) vstate;
Packit 67cb25
  
Packit 67cb25
  if (s == 0) 
Packit 67cb25
    s = 1;
Packit 67cb25
Packit 67cb25
  state->x = s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random32_bsd_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random32_state_t *state = (random32_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  bsd_initialize (state->x, 7, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 3;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 7 ; i++)
Packit 67cb25
    random32_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random64_bsd_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random64_state_t *state = (random64_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  bsd_initialize (state->x, 15, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 1;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 15 ; i++)
Packit 67cb25
    random64_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random128_bsd_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random128_state_t *state = (random128_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  bsd_initialize (state->x, 31, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 3;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 31 ; i++)
Packit 67cb25
    random128_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random256_bsd_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random256_state_t *state = (random256_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  bsd_initialize (state->x, 63, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 1;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 63 ; i++)
Packit 67cb25
    random256_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void 
Packit 67cb25
bsd_initialize (long int * x, int n, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  int i; 
Packit 67cb25
Packit 67cb25
  if (s == 0)
Packit 67cb25
    s = 1 ;
Packit 67cb25
Packit 67cb25
  x[0] = s;
Packit 67cb25
Packit 67cb25
  for (i = 1 ; i < n ; i++)
Packit 67cb25
    x[i] = 1103515245 * x[i-1] + 12345 ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void 
Packit 67cb25
libc5_initialize (long int * x, int n, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  int i; 
Packit 67cb25
Packit 67cb25
  if (s == 0)
Packit 67cb25
    s = 1 ;
Packit 67cb25
Packit 67cb25
  x[0] = s;
Packit 67cb25
Packit 67cb25
  for (i = 1 ; i < n ; i++)
Packit 67cb25
    x[i] = 1103515145 * x[i-1] + 12345 ;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void 
Packit 67cb25
glibc2_initialize (long int * x, int n, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  int i; 
Packit 67cb25
Packit 67cb25
  if (s == 0)
Packit 67cb25
    s = 1 ;
Packit 67cb25
Packit 67cb25
  x[0] = s;
Packit 67cb25
Packit 67cb25
  for (i = 1 ; i < n ; i++)
Packit 67cb25
    {
Packit 67cb25
      const long int h = s / 127773;
Packit 67cb25
      const long int t = 16807 * (s - h * 127773) - h * 2836;
Packit 67cb25
      if (t < 0)
Packit 67cb25
        {
Packit 67cb25
          s = t + 2147483647 ;
Packit 67cb25
        }
Packit 67cb25
      else
Packit 67cb25
        {
Packit 67cb25
          s = t ;
Packit 67cb25
        }
Packit 67cb25
Packit 67cb25
    x[i] = s ;
Packit 67cb25
    }
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random8_glibc2_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random8_state_t *state = (random8_state_t *) vstate;
Packit 67cb25
  
Packit 67cb25
  if (s == 0) 
Packit 67cb25
    s = 1;
Packit 67cb25
Packit 67cb25
  state->x = s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random32_glibc2_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random32_state_t *state = (random32_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  glibc2_initialize (state->x, 7, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 3;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 7 ; i++)
Packit 67cb25
    random32_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random64_glibc2_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random64_state_t *state = (random64_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  glibc2_initialize (state->x, 15, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 1;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 15 ; i++)
Packit 67cb25
    random64_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random128_glibc2_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random128_state_t *state = (random128_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  glibc2_initialize (state->x, 31, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 3;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 31 ; i++)
Packit 67cb25
    random128_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random256_glibc2_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random256_state_t *state = (random256_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  glibc2_initialize (state->x, 63, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 1;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 63 ; i++)
Packit 67cb25
    random256_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random8_libc5_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random8_state_t *state = (random8_state_t *) vstate;
Packit 67cb25
  
Packit 67cb25
  if (s == 0) 
Packit 67cb25
    s = 1;
Packit 67cb25
Packit 67cb25
  state->x = s;
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random32_libc5_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random32_state_t *state = (random32_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  libc5_initialize (state->x, 7, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 3;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 7 ; i++)
Packit 67cb25
    random32_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random64_libc5_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random64_state_t *state = (random64_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  libc5_initialize (state->x, 15, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 1;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 15 ; i++)
Packit 67cb25
    random64_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random128_libc5_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random128_state_t *state = (random128_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  libc5_initialize (state->x, 31, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 3;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 31 ; i++)
Packit 67cb25
    random128_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static void
Packit 67cb25
random256_libc5_set (void *vstate, unsigned long int s)
Packit 67cb25
{
Packit 67cb25
  random256_state_t *state = (random256_state_t *) vstate;
Packit 67cb25
  int i;
Packit 67cb25
Packit 67cb25
  libc5_initialize (state->x, 63, s) ;
Packit 67cb25
Packit 67cb25
  state->i = 1;
Packit 67cb25
  state->j = 0;
Packit 67cb25
  
Packit 67cb25
  for (i = 0 ; i < 10 * 63 ; i++)
Packit 67cb25
    random256_get (state) ; 
Packit 67cb25
}
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random_glibc2_type =
Packit 67cb25
{"random-glibc2",                       /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random128_state_t),
Packit 67cb25
 &random128_glibc2_set,
Packit 67cb25
 &random128_get,
Packit 67cb25
 &random128_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random8_glibc2_type =
Packit 67cb25
{"random8-glibc2",                      /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random8_state_t),
Packit 67cb25
 &random8_glibc2_set,
Packit 67cb25
 &random8_get,
Packit 67cb25
 &random8_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random32_glibc2_type =
Packit 67cb25
{"random32-glibc2",                     /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random32_state_t),
Packit 67cb25
 &random32_glibc2_set,
Packit 67cb25
 &random32_get,
Packit 67cb25
 &random32_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random64_glibc2_type =
Packit 67cb25
{"random64-glibc2",                     /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random64_state_t),
Packit 67cb25
 &random64_glibc2_set,
Packit 67cb25
 &random64_get,
Packit 67cb25
 &random64_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random128_glibc2_type =
Packit 67cb25
{"random128-glibc2",                    /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random128_state_t),
Packit 67cb25
 &random128_glibc2_set,
Packit 67cb25
 &random128_get,
Packit 67cb25
 &random128_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random256_glibc2_type =
Packit 67cb25
{"random256-glibc2",                    /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random256_state_t),
Packit 67cb25
 &random256_glibc2_set,
Packit 67cb25
 &random256_get,
Packit 67cb25
 &random256_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random_libc5_type =
Packit 67cb25
{"random-libc5",                        /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random128_state_t),
Packit 67cb25
 &random128_libc5_set,
Packit 67cb25
 &random128_get,
Packit 67cb25
 &random128_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random8_libc5_type =
Packit 67cb25
{"random8-libc5",                       /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random8_state_t),
Packit 67cb25
 &random8_libc5_set,
Packit 67cb25
 &random8_get,
Packit 67cb25
 &random8_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random32_libc5_type =
Packit 67cb25
{"random32-libc5",                      /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random32_state_t),
Packit 67cb25
 &random32_libc5_set,
Packit 67cb25
 &random32_get,
Packit 67cb25
 &random32_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random64_libc5_type =
Packit 67cb25
{"random64-libc5",                      /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random64_state_t),
Packit 67cb25
 &random64_libc5_set,
Packit 67cb25
 &random64_get,
Packit 67cb25
 &random64_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random128_libc5_type =
Packit 67cb25
{"random128-libc5",                     /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random128_state_t),
Packit 67cb25
 &random128_libc5_set,
Packit 67cb25
 &random128_get,
Packit 67cb25
 &random128_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random256_libc5_type =
Packit 67cb25
{"random256-libc5",                     /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random256_state_t),
Packit 67cb25
 &random256_libc5_set,
Packit 67cb25
 &random256_get,
Packit 67cb25
 &random256_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random_bsd_type =
Packit 67cb25
{"random-bsd",                  /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random128_state_t),
Packit 67cb25
 &random128_bsd_set,
Packit 67cb25
 &random128_get,
Packit 67cb25
 &random128_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random8_bsd_type =
Packit 67cb25
{"random8-bsd",                 /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random8_state_t),
Packit 67cb25
 &random8_bsd_set,
Packit 67cb25
 &random8_get,
Packit 67cb25
 &random8_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random32_bsd_type =
Packit 67cb25
{"random32-bsd",                        /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random32_state_t),
Packit 67cb25
 &random32_bsd_set,
Packit 67cb25
 &random32_get,
Packit 67cb25
 &random32_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random64_bsd_type =
Packit 67cb25
{"random64-bsd",                        /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random64_state_t),
Packit 67cb25
 &random64_bsd_set,
Packit 67cb25
 &random64_get,
Packit 67cb25
 &random64_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random128_bsd_type =
Packit 67cb25
{"random128-bsd",               /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random128_state_t),
Packit 67cb25
 &random128_bsd_set,
Packit 67cb25
 &random128_get,
Packit 67cb25
 &random128_get_double};
Packit 67cb25
Packit 67cb25
static const gsl_rng_type random256_bsd_type =
Packit 67cb25
{"random256-bsd",               /* name */
Packit 67cb25
 0x7fffffffUL,                  /* RAND_MAX */
Packit 67cb25
 0,                             /* RAND_MIN */
Packit 67cb25
 sizeof (random256_state_t),
Packit 67cb25
 &random256_bsd_set,
Packit 67cb25
 &random256_get,
Packit 67cb25
 &random256_get_double};
Packit 67cb25
Packit 67cb25
const gsl_rng_type *gsl_rng_random_libc5    = &random_libc5_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random8_libc5   = &random8_libc5_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random32_libc5  = &random32_libc5_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random64_libc5  = &random64_libc5_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random128_libc5 = &random128_libc5_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random256_libc5 = &random256_libc5_type;
Packit 67cb25
Packit 67cb25
const gsl_rng_type *gsl_rng_random_glibc2    = &random_glibc2_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random8_glibc2   = &random8_glibc2_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random32_glibc2  = &random32_glibc2_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random64_glibc2  = &random64_glibc2_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random128_glibc2 = &random128_glibc2_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random256_glibc2 = &random256_glibc2_type;
Packit 67cb25
Packit 67cb25
const gsl_rng_type *gsl_rng_random_bsd    = &random_bsd_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random8_bsd   = &random8_bsd_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random32_bsd  = &random32_bsd_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random64_bsd  = &random64_bsd_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random128_bsd = &random128_bsd_type;
Packit 67cb25
const gsl_rng_type *gsl_rng_random256_bsd = &random256_bsd_type;
Packit 67cb25
Packit 67cb25
Packit 67cb25
Packit 67cb25