summaryrefslogtreecommitdiff
path: root/numpy/random/src/dsfmt/dSFMT.h
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/random/src/dsfmt/dSFMT.h')
-rw-r--r--numpy/random/src/dsfmt/dSFMT.h697
1 files changed, 0 insertions, 697 deletions
diff --git a/numpy/random/src/dsfmt/dSFMT.h b/numpy/random/src/dsfmt/dSFMT.h
deleted file mode 100644
index 75ef5746f..000000000
--- a/numpy/random/src/dsfmt/dSFMT.h
+++ /dev/null
@@ -1,697 +0,0 @@
-#pragma once
-/**
- * @file dSFMT.h
- *
- * @brief double precision SIMD oriented Fast Mersenne Twister(dSFMT)
- * pseudorandom number generator based on IEEE 754 format.
- *
- * @author Mutsuo Saito (Hiroshima University)
- * @author Makoto Matsumoto (Hiroshima University)
- *
- * Copyright (C) 2007, 2008 Mutsuo Saito, Makoto Matsumoto and
- * Hiroshima University. All rights reserved.
- * Copyright (C) 2012 Mutsuo Saito, Makoto Matsumoto,
- * Hiroshima University and The University of Tokyo.
- * All rights reserved.
- *
- * The new BSD License is applied to this software.
- * see LICENSE.txt
- *
- * @note We assume that your system has inttypes.h. If your system
- * doesn't have inttypes.h, you have to typedef uint32_t and uint64_t,
- * and you have to define PRIu64 and PRIx64 in this file as follows:
- * @verbatim
- typedef unsigned int uint32_t
- typedef unsigned long long uint64_t
- #define PRIu64 "llu"
- #define PRIx64 "llx"
-@endverbatim
- * uint32_t must be exactly 32-bit unsigned integer type (no more, no
- * less), and uint64_t must be exactly 64-bit unsigned integer type.
- * PRIu64 and PRIx64 are used for printf function to print 64-bit
- * unsigned int and 64-bit unsigned int in hexadecimal format.
- */
-
-#ifndef DSFMT_H
-#define DSFMT_H
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-#include <assert.h>
-#include <stdio.h>
-
-/* Use NumPy config to determine if SSE2 is present */
-#include "numpy/npy_common.h"
-#if defined NPY_HAVE_SSE2_INTRINSICS
-#define HAVE_SSE2 1
-#endif
-
-#if !defined(DSFMT_MEXP)
-#ifdef __GNUC__
-#warning "DSFMT_MEXP is not defined. I assume DSFMT_MEXP is 19937."
-#endif
-#define DSFMT_MEXP 19937
-#endif
-/*-----------------
- BASIC DEFINITIONS
- -----------------*/
-/* Mersenne Exponent. The period of the sequence
- * is a multiple of 2^DSFMT_MEXP-1.
- * #define DSFMT_MEXP 19937 */
-/** DSFMT generator has an internal state array of 128-bit integers,
- * and N is its size. */
-#define DSFMT_N ((DSFMT_MEXP - 128) / 104 + 1)
-/** N32 is the size of internal state array when regarded as an array
- * of 32-bit integers.*/
-#define DSFMT_N32 (DSFMT_N * 4)
-/** N64 is the size of internal state array when regarded as an array
- * of 64-bit integers.*/
-#define DSFMT_N64 (DSFMT_N * 2)
-
-#if !defined(DSFMT_BIG_ENDIAN)
-#if defined(__BYTE_ORDER) && defined(__BIG_ENDIAN)
-#if __BYTE_ORDER == __BIG_ENDIAN
-#define DSFMT_BIG_ENDIAN 1
-#endif
-#elif defined(_BYTE_ORDER) && defined(_BIG_ENDIAN)
-#if _BYTE_ORDER == _BIG_ENDIAN
-#define DSFMT_BIG_ENDIAN 1
-#endif
-#elif defined(__BYTE_ORDER__) && defined(__BIG_ENDIAN__)
-#if __BYTE_ORDER__ == __BIG_ENDIAN__
-#define DSFMT_BIG_ENDIAN 1
-#endif
-#elif defined(BYTE_ORDER) && defined(BIG_ENDIAN)
-#if BYTE_ORDER == BIG_ENDIAN
-#define DSFMT_BIG_ENDIAN 1
-#endif
-#elif defined(__BIG_ENDIAN) || defined(_BIG_ENDIAN) || \
- defined(__BIG_ENDIAN__) || defined(BIG_ENDIAN)
-#define DSFMT_BIG_ENDIAN 1
-#endif
-#endif
-
-#if defined(DSFMT_BIG_ENDIAN) && defined(__amd64)
-#undef DSFMT_BIG_ENDIAN
-#endif
-
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
-#include <inttypes.h>
-#elif defined(_MSC_VER) || defined(__BORLANDC__)
-#if !defined(DSFMT_UINT32_DEFINED) && !defined(SFMT_UINT32_DEFINED)
-typedef unsigned int uint32_t;
-typedef unsigned __int64 uint64_t;
-#ifndef UINT64_C
-#define UINT64_C(v) (v##ui64)
-#endif
-#define DSFMT_UINT32_DEFINED
-#if !defined(inline) && !defined(__cplusplus)
-#define inline __forceinline
-#endif
-#endif
-#else
-#include <inttypes.h>
-#if !defined(inline) && !defined(__cplusplus)
-#if defined(__GNUC__)
-#define inline __forceinline__
-#else
-#define inline
-#endif
-#endif
-#endif
-
-#ifndef PRIu64
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define PRIu64 "I64u"
-#define PRIx64 "I64x"
-#else
-#define PRIu64 "llu"
-#define PRIx64 "llx"
-#endif
-#endif
-
-#ifndef UINT64_C
-#define UINT64_C(v) (v##ULL)
-#endif
-
-/*------------------------------------------
- 128-bit SIMD like data type for standard C
- ------------------------------------------*/
-#if defined(HAVE_ALTIVEC)
-#if !defined(__APPLE__)
-#include <altivec.h>
-#endif
-/** 128-bit data structure */
-union W128_T {
- vector unsigned int s;
- uint64_t u[2];
- uint32_t u32[4];
- double d[2];
-};
-
-#elif defined(HAVE_SSE2)
-#include <emmintrin.h>
-
-/** 128-bit data structure */
-union W128_T {
- __m128i si;
- __m128d sd;
- uint64_t u[2];
- uint32_t u32[4];
- double d[2];
-};
-#else /* standard C */
-/** 128-bit data structure */
-union W128_T {
- uint64_t u[2];
- uint32_t u32[4];
- double d[2];
-};
-#endif
-
-/** 128-bit data type */
-typedef union W128_T w128_t;
-
-/** the 128-bit internal state array */
-struct DSFMT_T {
- w128_t status[DSFMT_N + 1];
- int idx;
-};
-typedef struct DSFMT_T dsfmt_t;
-
-/** dsfmt internal state vector */
-extern dsfmt_t dsfmt_global_data;
-/** dsfmt mexp for check */
-extern const int dsfmt_global_mexp;
-
-void dsfmt_gen_rand_all(dsfmt_t *dsfmt);
-void dsfmt_fill_array_open_close(dsfmt_t *dsfmt, double array[], int size);
-void dsfmt_fill_array_close_open(dsfmt_t *dsfmt, double array[], int size);
-void dsfmt_fill_array_open_open(dsfmt_t *dsfmt, double array[], int size);
-void dsfmt_fill_array_close1_open2(dsfmt_t *dsfmt, double array[], int size);
-void dsfmt_chk_init_gen_rand(dsfmt_t *dsfmt, uint32_t seed, int mexp);
-void dsfmt_chk_init_by_array(dsfmt_t *dsfmt, uint32_t init_key[],
- int key_length, int mexp);
-const char *dsfmt_get_idstring(void);
-int dsfmt_get_min_array_size(void);
-
-#if defined(__GNUC__)
-#define DSFMT_PRE_INLINE inline static
-#define DSFMT_PST_INLINE __attribute__((always_inline))
-#elif defined(_MSC_VER) && _MSC_VER >= 1200
-#define DSFMT_PRE_INLINE __forceinline static
-#define DSFMT_PST_INLINE
-#else
-#define DSFMT_PRE_INLINE inline static
-#define DSFMT_PST_INLINE
-#endif
-DSFMT_PRE_INLINE uint32_t dsfmt_genrand_uint32(dsfmt_t *dsfmt) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double
-dsfmt_genrand_close1_open2(dsfmt_t *dsfmt) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double
-dsfmt_genrand_close_open(dsfmt_t *dsfmt) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double
-dsfmt_genrand_open_close(dsfmt_t *dsfmt) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double
-dsfmt_genrand_open_open(dsfmt_t *dsfmt) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE uint32_t dsfmt_gv_genrand_uint32(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double dsfmt_gv_genrand_close1_open2(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double dsfmt_gv_genrand_close_open(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double dsfmt_gv_genrand_open_close(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double dsfmt_gv_genrand_open_open(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void dsfmt_gv_fill_array_open_close(double array[],
- int size) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void dsfmt_gv_fill_array_close_open(double array[],
- int size) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void dsfmt_gv_fill_array_open_open(double array[],
- int size) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void
-dsfmt_gv_fill_array_close1_open2(double array[], int size) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void dsfmt_gv_init_gen_rand(uint32_t seed) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void dsfmt_gv_init_by_array(uint32_t init_key[],
- int key_length) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void dsfmt_init_gen_rand(dsfmt_t *dsfmt,
- uint32_t seed) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void dsfmt_init_by_array(dsfmt_t *dsfmt, uint32_t init_key[],
- int key_length) DSFMT_PST_INLINE;
-
-/**
- * This function generates and returns unsigned 32-bit integer.
- * This is slower than SFMT, only for convenience usage.
- * dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called
- * before this function.
- * @param dsfmt dsfmt internal state date
- * @return double precision floating point pseudorandom number
- */
-inline static uint32_t dsfmt_genrand_uint32(dsfmt_t *dsfmt) {
- uint32_t r;
- uint64_t *psfmt64 = &dsfmt->status[0].u[0];
-
- if (dsfmt->idx >= DSFMT_N64) {
- dsfmt_gen_rand_all(dsfmt);
- dsfmt->idx = 0;
- }
- r = psfmt64[dsfmt->idx++] & 0xffffffffU;
- return r;
-}
-
-/**
- * This function generates and returns double precision pseudorandom
- * number which distributes uniformly in the range [1, 2). This is
- * the primitive and faster than generating numbers in other ranges.
- * dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called
- * before this function.
- * @param dsfmt dsfmt internal state date
- * @return double precision floating point pseudorandom number
- */
-inline static double dsfmt_genrand_close1_open2(dsfmt_t *dsfmt) {
- double r;
- double *psfmt64 = &dsfmt->status[0].d[0];
-
- if (dsfmt->idx >= DSFMT_N64) {
- dsfmt_gen_rand_all(dsfmt);
- dsfmt->idx = 0;
- }
- r = psfmt64[dsfmt->idx++];
- return r;
-}
-
-/**
- * This function generates and returns unsigned 32-bit integer.
- * This is slower than SFMT, only for convenience usage.
- * dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called
- * before this function. This function uses \b global variables.
- * @return double precision floating point pseudorandom number
- */
-inline static uint32_t dsfmt_gv_genrand_uint32(void) {
- return dsfmt_genrand_uint32(&dsfmt_global_data);
-}
-
-/**
- * This function generates and returns double precision pseudorandom
- * number which distributes uniformly in the range [1, 2).
- * dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called
- * before this function. This function uses \b global variables.
- * @return double precision floating point pseudorandom number
- */
-inline static double dsfmt_gv_genrand_close1_open2(void) {
- return dsfmt_genrand_close1_open2(&dsfmt_global_data);
-}
-
-/**
- * This function generates and returns double precision pseudorandom
- * number which distributes uniformly in the range [0, 1).
- * dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called
- * before this function.
- * @param dsfmt dsfmt internal state date
- * @return double precision floating point pseudorandom number
- */
-inline static double dsfmt_genrand_close_open(dsfmt_t *dsfmt) {
- return dsfmt_genrand_close1_open2(dsfmt) - 1.0;
-}
-
-/**
- * This function generates and returns double precision pseudorandom
- * number which distributes uniformly in the range [0, 1).
- * dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called
- * before this function. This function uses \b global variables.
- * @return double precision floating point pseudorandom number
- */
-inline static double dsfmt_gv_genrand_close_open(void) {
- return dsfmt_gv_genrand_close1_open2() - 1.0;
-}
-
-/**
- * This function generates and returns double precision pseudorandom
- * number which distributes uniformly in the range (0, 1].
- * dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called
- * before this function.
- * @param dsfmt dsfmt internal state date
- * @return double precision floating point pseudorandom number
- */
-inline static double dsfmt_genrand_open_close(dsfmt_t *dsfmt) {
- return 2.0 - dsfmt_genrand_close1_open2(dsfmt);
-}
-
-/**
- * This function generates and returns double precision pseudorandom
- * number which distributes uniformly in the range (0, 1].
- * dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called
- * before this function. This function uses \b global variables.
- * @return double precision floating point pseudorandom number
- */
-inline static double dsfmt_gv_genrand_open_close(void) {
- return 2.0 - dsfmt_gv_genrand_close1_open2();
-}
-
-/**
- * This function generates and returns double precision pseudorandom
- * number which distributes uniformly in the range (0, 1).
- * dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called
- * before this function.
- * @param dsfmt dsfmt internal state date
- * @return double precision floating point pseudorandom number
- */
-inline static double dsfmt_genrand_open_open(dsfmt_t *dsfmt) {
- double *dsfmt64 = &dsfmt->status[0].d[0];
- union {
- double d;
- uint64_t u;
- } r;
-
- if (dsfmt->idx >= DSFMT_N64) {
- dsfmt_gen_rand_all(dsfmt);
- dsfmt->idx = 0;
- }
- r.d = dsfmt64[dsfmt->idx++];
- r.u |= 1;
- return r.d - 1.0;
-}
-
-/**
- * This function generates and returns double precision pseudorandom
- * number which distributes uniformly in the range (0, 1).
- * dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called
- * before this function. This function uses \b global variables.
- * @return double precision floating point pseudorandom number
- */
-inline static double dsfmt_gv_genrand_open_open(void) {
- return dsfmt_genrand_open_open(&dsfmt_global_data);
-}
-
-/**
- * This function generates double precision floating point
- * pseudorandom numbers which distribute in the range [1, 2) to the
- * specified array[] by one call. This function is the same as
- * dsfmt_fill_array_close1_open2() except that this function uses
- * \b global variables.
- * @param array an array where pseudorandom numbers are filled
- * by this function.
- * @param size the number of pseudorandom numbers to be generated.
- * see also \sa dsfmt_fill_array_close1_open2()
- */
-inline static void dsfmt_gv_fill_array_close1_open2(double array[], int size) {
- dsfmt_fill_array_close1_open2(&dsfmt_global_data, array, size);
-}
-
-/**
- * This function generates double precision floating point
- * pseudorandom numbers which distribute in the range (0, 1] to the
- * specified array[] by one call. This function is the same as
- * dsfmt_gv_fill_array_close1_open2() except the distribution range.
- * This function uses \b global variables.
- * @param array an array where pseudorandom numbers are filled
- * by this function.
- * @param size the number of pseudorandom numbers to be generated.
- * see also \sa dsfmt_fill_array_close1_open2() and \sa
- * dsfmt_gv_fill_array_close1_open2()
- */
-inline static void dsfmt_gv_fill_array_open_close(double array[], int size) {
- dsfmt_fill_array_open_close(&dsfmt_global_data, array, size);
-}
-
-/**
- * This function generates double precision floating point
- * pseudorandom numbers which distribute in the range [0, 1) to the
- * specified array[] by one call. This function is the same as
- * dsfmt_gv_fill_array_close1_open2() except the distribution range.
- * This function uses \b global variables.
- * @param array an array where pseudorandom numbers are filled
- * by this function.
- * @param size the number of pseudorandom numbers to be generated.
- * see also \sa dsfmt_fill_array_close1_open2() \sa
- * dsfmt_gv_fill_array_close1_open2()
- */
-inline static void dsfmt_gv_fill_array_close_open(double array[], int size) {
- dsfmt_fill_array_close_open(&dsfmt_global_data, array, size);
-}
-
-/**
- * This function generates double precision floating point
- * pseudorandom numbers which distribute in the range (0, 1) to the
- * specified array[] by one call. This function is the same as
- * dsfmt_gv_fill_array_close1_open2() except the distribution range.
- * This function uses \b global variables.
- * @param array an array where pseudorandom numbers are filled
- * by this function.
- * @param size the number of pseudorandom numbers to be generated.
- * see also \sa dsfmt_fill_array_close1_open2() \sa
- * dsfmt_gv_fill_array_close1_open2()
- */
-inline static void dsfmt_gv_fill_array_open_open(double array[], int size) {
- dsfmt_fill_array_open_open(&dsfmt_global_data, array, size);
-}
-
-/**
- * This function initializes the internal state array with a 32-bit
- * integer seed.
- * @param dsfmt dsfmt state vector.
- * @param seed a 32-bit integer used as the seed.
- */
-inline static void dsfmt_init_gen_rand(dsfmt_t *dsfmt, uint32_t seed) {
- dsfmt_chk_init_gen_rand(dsfmt, seed, DSFMT_MEXP);
-}
-
-/**
- * This function initializes the internal state array with a 32-bit
- * integer seed. This function uses \b global variables.
- * @param seed a 32-bit integer used as the seed.
- * see also \sa dsfmt_init_gen_rand()
- */
-inline static void dsfmt_gv_init_gen_rand(uint32_t seed) {
- dsfmt_init_gen_rand(&dsfmt_global_data, seed);
-}
-
-/**
- * This function initializes the internal state array,
- * with an array of 32-bit integers used as the seeds.
- * @param dsfmt dsfmt state vector
- * @param init_key the array of 32-bit integers, used as a seed.
- * @param key_length the length of init_key.
- */
-inline static void dsfmt_init_by_array(dsfmt_t *dsfmt, uint32_t init_key[],
- int key_length) {
- dsfmt_chk_init_by_array(dsfmt, init_key, key_length, DSFMT_MEXP);
-}
-
-/**
- * This function initializes the internal state array,
- * with an array of 32-bit integers used as the seeds.
- * This function uses \b global variables.
- * @param init_key the array of 32-bit integers, used as a seed.
- * @param key_length the length of init_key.
- * see also \sa dsfmt_init_by_array()
- */
-inline static void dsfmt_gv_init_by_array(uint32_t init_key[], int key_length) {
- dsfmt_init_by_array(&dsfmt_global_data, init_key, key_length);
-}
-
-#if !defined(DSFMT_DO_NOT_USE_OLD_NAMES)
-DSFMT_PRE_INLINE const char *get_idstring(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE int get_min_array_size(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void init_gen_rand(uint32_t seed) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void init_by_array(uint32_t init_key[],
- int key_length) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double genrand_close1_open2(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double genrand_close_open(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double genrand_open_close(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE double genrand_open_open(void) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void fill_array_open_close(double array[],
- int size) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void fill_array_close_open(double array[],
- int size) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void fill_array_open_open(double array[],
- int size) DSFMT_PST_INLINE;
-DSFMT_PRE_INLINE void fill_array_close1_open2(double array[],
- int size) DSFMT_PST_INLINE;
-
-/**
- * This function is just the same as dsfmt_get_idstring().
- * @return id string.
- * see also \sa dsfmt_get_idstring()
- */
-inline static const char *get_idstring(void) { return dsfmt_get_idstring(); }
-
-/**
- * This function is just the same as dsfmt_get_min_array_size().
- * @return minimum size of array used for fill_array functions.
- * see also \sa dsfmt_get_min_array_size()
- */
-inline static int get_min_array_size(void) {
- return dsfmt_get_min_array_size();
-}
-
-/**
- * This function is just the same as dsfmt_gv_init_gen_rand().
- * @param seed a 32-bit integer used as the seed.
- * see also \sa dsfmt_gv_init_gen_rand(), \sa dsfmt_init_gen_rand().
- */
-inline static void init_gen_rand(uint32_t seed) {
- dsfmt_gv_init_gen_rand(seed);
-}
-
-/**
- * This function is just the same as dsfmt_gv_init_by_array().
- * @param init_key the array of 32-bit integers, used as a seed.
- * @param key_length the length of init_key.
- * see also \sa dsfmt_gv_init_by_array(), \sa dsfmt_init_by_array().
- */
-inline static void init_by_array(uint32_t init_key[], int key_length) {
- dsfmt_gv_init_by_array(init_key, key_length);
-}
-
-/**
- * This function is just the same as dsfmt_gv_genrand_close1_open2().
- * @return double precision floating point number.
- * see also \sa dsfmt_genrand_close1_open2() \sa
- * dsfmt_gv_genrand_close1_open2()
- */
-inline static double genrand_close1_open2(void) {
- return dsfmt_gv_genrand_close1_open2();
-}
-
-/**
- * This function is just the same as dsfmt_gv_genrand_close_open().
- * @return double precision floating point number.
- * see also \sa dsfmt_genrand_close_open() \sa
- * dsfmt_gv_genrand_close_open()
- */
-inline static double genrand_close_open(void) {
- return dsfmt_gv_genrand_close_open();
-}
-
-/**
- * This function is just the same as dsfmt_gv_genrand_open_close().
- * @return double precision floating point number.
- * see also \sa dsfmt_genrand_open_close() \sa
- * dsfmt_gv_genrand_open_close()
- */
-inline static double genrand_open_close(void) {
- return dsfmt_gv_genrand_open_close();
-}
-
-/**
- * This function is just the same as dsfmt_gv_genrand_open_open().
- * @return double precision floating point number.
- * see also \sa dsfmt_genrand_open_open() \sa
- * dsfmt_gv_genrand_open_open()
- */
-inline static double genrand_open_open(void) {
- return dsfmt_gv_genrand_open_open();
-}
-
-/**
- * This function is juset the same as dsfmt_gv_fill_array_open_close().
- * @param array an array where pseudorandom numbers are filled
- * by this function.
- * @param size the number of pseudorandom numbers to be generated.
- * see also \sa dsfmt_gv_fill_array_open_close(), \sa
- * dsfmt_fill_array_close1_open2(), \sa
- * dsfmt_gv_fill_array_close1_open2()
- */
-inline static void fill_array_open_close(double array[], int size) {
- dsfmt_gv_fill_array_open_close(array, size);
-}
-
-/**
- * This function is juset the same as dsfmt_gv_fill_array_close_open().
- * @param array an array where pseudorandom numbers are filled
- * by this function.
- * @param size the number of pseudorandom numbers to be generated.
- * see also \sa dsfmt_gv_fill_array_close_open(), \sa
- * dsfmt_fill_array_close1_open2(), \sa
- * dsfmt_gv_fill_array_close1_open2()
- */
-inline static void fill_array_close_open(double array[], int size) {
- dsfmt_gv_fill_array_close_open(array, size);
-}
-
-/**
- * This function is juset the same as dsfmt_gv_fill_array_open_open().
- * @param array an array where pseudorandom numbers are filled
- * by this function.
- * @param size the number of pseudorandom numbers to be generated.
- * see also \sa dsfmt_gv_fill_array_open_open(), \sa
- * dsfmt_fill_array_close1_open2(), \sa
- * dsfmt_gv_fill_array_close1_open2()
- */
-inline static void fill_array_open_open(double array[], int size) {
- dsfmt_gv_fill_array_open_open(array, size);
-}
-
-/**
- * This function is juset the same as dsfmt_gv_fill_array_close1_open2().
- * @param array an array where pseudorandom numbers are filled
- * by this function.
- * @param size the number of pseudorandom numbers to be generated.
- * see also \sa dsfmt_fill_array_close1_open2(), \sa
- * dsfmt_gv_fill_array_close1_open2()
- */
-inline static void fill_array_close1_open2(double array[], int size) {
- dsfmt_gv_fill_array_close1_open2(array, size);
-}
-#endif /* DSFMT_DO_NOT_USE_OLD_NAMES */
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif /* DSFMT_H */
-
-union random_val_t {
- double d;
- uint64_t u64;
-};
-
-typedef struct s_dsfmt_state {
- dsfmt_t *state;
- int has_uint32;
- uint32_t uinteger;
-
- double *buffered_uniforms;
- int buffer_loc;
-} dsfmt_state;
-
-static inline double dsfmt_next_buffer(dsfmt_state *state) {
- if (state->buffer_loc < DSFMT_N64) {
- double out = state->buffered_uniforms[state->buffer_loc];
- state->buffer_loc++;
- return out;
- }
- dsfmt_fill_array_close1_open2(state->state, state->buffered_uniforms,
- DSFMT_N64);
- state->buffer_loc = 1;
- return state->buffered_uniforms[0];
-}
-
-static inline double dsfmt_next_double(dsfmt_state *state) {
- return dsfmt_next_buffer(state) - 1.0;
-}
-
-static inline uint64_t dsfmt_next64(dsfmt_state *state) {
- /* Discard bottom 16 bits */
- uint64_t out;
- union random_val_t rv;
- rv.d = dsfmt_next_buffer(state);
- out = (rv.u64 >> 16) << 32;
- rv.d = dsfmt_next_buffer(state);
- out |= (rv.u64 >> 16) & 0xffffffff;
- return out;
-}
-
-static inline uint32_t dsfmt_next32(dsfmt_state *state) {
- /* Discard bottom 16 bits */
- union random_val_t rv;
- rv.d = dsfmt_next_buffer(state);
- // uint64_t *out = (uint64_t *)&d;
- return (uint32_t)((rv.u64 >> 16) & 0xffffffff);
-}
-
-static inline uint64_t dsfmt_next_raw(dsfmt_state *state) {
- union random_val_t rv;
- rv.d = dsfmt_next_buffer(state);
- return rv.u64;
-}
-
-void dsfmt_jump(dsfmt_state *state); \ No newline at end of file