|
|
[ 簡単な説明 ] 乱数ライブラリで使用する関数のプロトタイプ宣言を行います。 1. 一様乱数 |
| urnd( ) | 乗算合同法 |
| mrnd( ) | M系列(周期 : 2521 - 1 ≒ 6.86×10156) |
| rrnd( ) | 乗算合同法(周期 : 約6.95×1012) |
| ornd( ) | Park and Miller 乗算合同法 (周期 : 231 - 2 = 2147483646) |
| brnd( ) | Park and Miller 乗算合同法 + Bays-Durham 切り混ぜ法 |
| ernd( ) | L'Ecuyer 2種の乗算合同法組合せ(周期:約2.3×1018) + Bays-Durham 切り混ぜ法 |
| krnd( ) | Knuth 減算法 |
| drnd( ) | データ暗合化に基づく乱数列 |
| qrnd( ) | 線形合同法(高速生成法) |
| prnd( ) | ポータブルな乱数生成ルーチン(拙速生成法) |
2. 整数乱数
|
| irnd( ) | max 〜 min の範囲の整数乱数 |
3. その他乱数 |
| gaussd( ) | ボックス−マラー法による正規乱数(高速・改良版) |
| tri_rand( ) | 三角分布乱数 |
| exp_rand( ) | 指数分布乱数 |
| binornal( ) | 2変量正規分布乱数 |
| rnd_vector( ) | ベクトル乱数 |
| rnd_vector3( ) | 3次元ベクトル乱数 |
4. ランダム・データ生成関数 |
| mkdata_i( ) | int 型ランダム・データ生成関数 |
| mkdata_d( ) | double 型ランダム・データ生成関数 |
| mkdata_s( ) | 文字型ランダム・データ生成関数 |
| mkdata_sd( ) | 文字列型ランダム・データ生成関数 |
5. データ撹拌関数 |
| shuffle_i( ) | int 型データ攪拌関数 |
| shuffle_d( ) | double 型データ攪拌関数 |
| shuffle_c( ) | 文字型データ攪拌関数 |
6. 無作為抽出関数 |
| pickup( ) | int 型データ無作為抽出関数 |
/* random.h */
#ifndef _RANDOM_
#define _RANDOM_
#include <math.h>
#include <string.h>
#define MASK 123459876L /* 初期化マスク(任意定数)*/
#define NTAB 32 /* brnd(),ernd() 関連配列サイズ */
#define MBIG 2147483647 /* krnd()関連定数 */
#define MSEED 161803398 /* 〃 */
#define ulong unsigned long
#define _M 17 /* 一様乱数の種類 */
#define _MP 34 /* 一様乱数(拙速生成法)の種類 */
/* random.c */
void _error(char *s, int r);
void init_urnd0(long seed);
void init_urnd1(long seed);
void init_urnd2(long seed);
void init_urnd3(long seed);
void init_urnd4(long seed);
void init_urnd5(long seed);
void init_urnd6(long seed);
void init_mrnd(long seed);
void init_rrnd(long seed);
void init_ornd0(long seed);
void init_ornd1(long seed);
void init_ornd2(long seed);
void init_brnd(long seed);
void init_ernd(long seed);
void init_krnd(long seed);
void init_drnd(long seed);
void init_qrnd(long seed);
long init_prnd0(long seed);
long init_prnd1(long seed);
long init_prnd2(long seed);
long init_prnd3(long seed);
long init_prnd4(long seed);
long init_prnd5(long seed);
long init_prnd6(long seed);
long init_prnd7(long seed);
long init_prnd8(long seed);
long init_prnd9(long seed);
long init_prnd10(long seed);
long init_prnd11(long seed);
long init_prnd12(long seed);
long init_prnd13(long seed);
long init_prnd14(long seed);
long init_prnd15(long seed);
long init_prnd16(long seed);
long init_prnd17(long seed);
long init_prnd18(long seed);
long init_prnd19(long seed);
long init_prnd20(long seed);
long init_prnd21(long seed);
long init_prnd22(long seed);
long init_prnd23(long seed);
long init_prnd24(long seed);
long init_prnd25(long seed);
long init_prnd26(long seed);
long init_prnd27(long seed);
long init_prnd28(long seed);
long init_prnd29(long seed);
long init_prnd30(long seed);
long init_prnd31(long seed);
long init_prnd32(long seed);
long init_prnd33(long seed);
double urnd0(void);
double urnd1(void);
double urnd2(void);
double urnd3(void);
double urnd4(void);
double urnd5(void);
double urnd6(void);
void rnd521(void);
double mrnd(void);
double rrnd(void);
double ornd0(void);
double ornd1(void);
double ornd2(void);
double brnd(void);
long bcal(void);
double ernd(void);
long ecal1(void);
long ecal2(void);
double krnd(void);
double drnd(void);
double qrnd(void);
double prnd0(void);
double prnd1(void);
double prnd2(void);
double prnd3(void);
double prnd4(void);
double prnd5(void);
double prnd6(void);
double prnd7(void);
double prnd8(void);
double prnd9(void);
double prnd10(void);
double prnd11(void);
double prnd12(void);
double prnd13(void);
double prnd14(void);
double prnd15(void);
double prnd16(void);
double prnd17(void);
double prnd18(void);
double prnd19(void);
double prnd20(void);
double prnd21(void);
double prnd22(void);
double prnd23(void);
double prnd24(void);
double prnd25(void);
double prnd26(void);
double prnd27(void);
double prnd28(void);
double prnd29(void);
double prnd30(void);
double prnd31(void);
double prnd32(void);
double prnd33(void);
void init_irnd(void (*_init)(long s), double (*_rnd)(void), long seed);
int irnd(int max, int min);
void init_gaussd(void (*_init)(long s), double (*_rnd)(void), long seed);
double gaussd(double av, double st);
void init_tri_rand(void (*_init)(long s), double (*_rnd)(void), long seed);
double tri_rand(void);
void init_exp_rand(void (*_init)(long s), double (*_rnd)(void), long seed);
double exp_rand(void);
void init_binormal(void (*_init)(long s), double (*_rnd)(void), long seed);
void binormal(double r, double *x, double *y);
void init_rnd_vector(void (*_init)(long s), double (*_rnd)(void), long seed);
void rnd_vector(double *x, double *y);
void init_rnd_vector3(void (*_init)(long s), double (*_rnd)(void), long seed);
void rnd_vector3(double *x, double *y, double *z);
/* global variables */
extern ulong _idum_u0, _idum_u1, _idum_u2; /* urnd0()〜urnd6()の乱数核 */
extern ulong _idum_u3, _idum_u4, _idum_u5; /* 〃 */
extern ulong _idum_u6; /* 〃 */
extern ulong *_prx, *_prx_end; /* mrnd()の乱数核ほか変数 */
extern ulong _rx[522]; /* 〃 */
extern unsigned int r_s1, r_s2, r_s3; /* rrnd()の乱数核ほか変数 */
extern long _idum_o0, _idum_o1, _idum_o2; /* ornd0()〜ornd2()の乱数核 */
extern long _idum_b, b_nd, b_iy; /* brnd()の乱数核ほか変数 */
extern long b_iv[NTAB]; /* 〃 */
extern long _idum_e1, _idum_e2, e_nd, e_iy; /* ernd()の乱数核ほか変数 */
extern long e_iv[NTAB]; /* 〃 */
extern long *k_ma_end, *pk1, *pk2; /* krnd()の乱数核ほか変数 */
extern long k_ma[57]; /* 〃 */
extern ulong _idum_d; /* drnd()の乱数核 */
extern ulong _idum_q; /* qrnd()の乱数核 */
extern ulong _idum_p0, _idum_p1, _idum_p2; /* prnd0()〜prnd33()の乱数核 */
extern ulong _idum_p3, _idum_p4, _idum_p5; /* 〃 */
extern ulong _idum_p6, _idum_p7, _idum_p8; /* 〃 */
extern ulong _idum_p9, _idum_p10, _idum_p11; /* 〃 */
extern ulong _idum_p12, _idum_p13, _idum_p14; /* 〃 */
extern ulong _idum_p15, _idum_p16, _idum_p17; /* 〃 */
extern ulong _idum_p18, _idum_p19, _idum_p20; /* 〃 */
extern ulong _idum_p21, _idum_p22, _idum_p23; /* 〃 */
extern ulong _idum_p24, _idum_p25, _idum_p26; /* 〃 */
extern ulong _idum_p27, _idum_p28, _idum_p29; /* 〃 */
extern ulong _idum_p30, _idum_p31, _idum_p32; /* 〃 */
extern ulong _idum_p33; /* 〃 */
static char _pname[_M][7] =
{"urnd0", "urnd1", "urnd2", "urnd3", "urnd4", "urnd5",
"urnd6", "mrnd", "rrnd", "ornd0", "ornd1", "ornd2",
"brnd" , "ernd", "krnd", "drnd" , "qrnd" };
static double (*_func[_M])(void) =
{urnd0, urnd1, urnd2, urnd3, urnd4, urnd5, urnd6, mrnd, rrnd,
ornd0, ornd1, ornd2, brnd, ernd, krnd, drnd, qrnd };
static void (*_init[_M])(long s) =
{init_urnd0, init_urnd1, init_urnd2, init_urnd3, init_urnd4, init_urnd5,
init_urnd6, init_mrnd, init_rrnd, init_ornd0, init_ornd1, init_ornd2,
init_brnd, init_ernd, init_krnd, init_drnd, init_qrnd };
static double (*_func_p[_MP])(void) = {
prnd0, prnd1, prnd2, prnd3, prnd4, prnd5, prnd6, prnd7, prnd8,
prnd9, prnd10, prnd11, prnd12, prnd13, prnd14, prnd15, prnd16, prnd17,
prnd18, prnd19, prnd20, prnd21, prnd22, prnd23, prnd24, prnd25, prnd26,
prnd27, prnd28, prnd29, prnd30, prnd31, prnd32, prnd33 };
static long (*_init_p[_MP])(long s) = {
init_prnd0, init_prnd1, init_prnd2, init_prnd3, init_prnd4,
init_prnd5, init_prnd6, init_prnd7, init_prnd8, init_prnd9,
init_prnd10, init_prnd11, init_prnd12, init_prnd13, init_prnd14,
init_prnd15, init_prnd16, init_prnd17, init_prnd18, init_prnd19,
init_prnd20, init_prnd21, init_prnd22, init_prnd23, init_prnd24,
init_prnd25, init_prnd26, init_prnd27, init_prnd28, init_prnd29,
init_prnd30, init_prnd31, init_prnd32, init_prnd33 };
extern double (*_rand)(void); /* 一様乱数以外の乱数で呼び出す一様分布乱数 */
extern double _tri;
/* ランダム・データ生成関数 */
void init_mkdata(void (*initfunc)(long s), double (*func)(void), long seed);
int *mkdata_i(int n, int min, int max);
unsigned char *mkdata_c(int n, unsigned char min, unsigned char max);
double *mkdata_d(int n, double min, double max);
unsigned char **mkdata_s(int n, int smin, int smax, unsigned char min, unsigned char max);
unsigned char **mkdata_sd(int n, int smin, int smax, unsigned char min, unsigned char max);
/* データ撹拌関数 */
void shuffle_i(int *a, int n, long seed);
void shuffle_d(double *a, int n, long seed);
void shuffle_c(unsigned char **a, int n, long seed);
/* 無作為抽出関数 */
void init_pickup(void (*init)(long s), double (*rnd)(void), long seed);
void pickup(int m, int n, int *pick);
#endif
|