乱数プログラム 使用法

index 目次

  1. コーディング上の注意
  2. ライブラリ一覧



1.コーディング上の注意

#include "random.h" を指定すること。
注:内部で,標準ヘッダファイル <math.h>, <string.h> をインクルードしている。

2.ライブラリ一覧

(1)一様乱数                      index (目次に戻る)

一様乱数は,初期設定用関数と一様乱数生成関数の組で使用します。
最初の乱数生成前に必ず初期設定関数を実行して下さい。
初期設定用関数は,乱数の種として long 型引数を指定します。

生成される一様乱数系列は,初期設定用関数を同一引数(種)で実行した場合は当然同一系列となります。
従って、実行するたびに異なる系列の乱数を生成したい場合には、時刻等を用いて種を作るようにすべきです。
一様乱数生成関数は引数無しでコールします。戻り値は,double 型の0〜1の値です。(0と1以外)

下記の一様乱数生成ルーチンにおいて,特に,prnd は拙速生成ルーチンであり,スピード重視により,乱数系列(周期)が他の乱数生成関数に比較し特に短いので、使用する場合は注意して下さい。(6075〜714025)
prnd 用の初期設定用関数は、各系列長(周期長)を返り値として long 型で返します。

初期設定用
関数
一様乱数
生成関数
説明
init_urnd[0-6]( ) urnd[0-6]( ) 6種 乗算合同法
init_mrnd( ) mrnd( ) M系列 (周期:6.86×10^156)
init_rrnd( ) rrnd( ) 乗算合同法 (周期:6.95×10^12)
init_ornd[0-2]( ) ornd[0-2]( ) 3種 Park and Miller 乗算合同法
(周期 : 2147483646)
init_brnd( ) brnd( ) Park and Miller 乗算合同法
+ Bays-Durham 切り混ぜ法
init_ernd( ) ernd( ) L'Ecuyer 2種の乗算合同法組合せ(周期:2.3×10^18)
+ Bays-Durham 切り混ぜ法
init_krnd( ) krnd( ) Knuth 減算法
init_drnd( ) drnd( ) データ暗合化に基づく乱数列
init_qrnd( ) qrnd( ) 線形合同法(高速生成法)
init_prnd[0-33]( ) prnd[0-33]( ) 33種 ポータブルな乱数生成ルーチン(拙速生成法)


注1:初期設定用関数は void 型,一様乱数生成関数は double 型(返り値が乱数)

(2)各種乱数                    index (目次に戻る)



以下の各種乱数はいずれもその乱数を生成する為、一様乱数を使用します。
従って、各初期設定関数を呼び出す際に,任意の一様乱数関数用の初期設定用関数名(init)、乱数生成関数(rnd)名、及び種(seed)をこの順番で引数として渡します。
init と rnd は必ず上記に示した一様乱数関数の組で渡して下さい。
異なる組合せの初期設定関数、乱数生成関数を渡した場合のプログラム動作は、保証できません。

乱数種類 初期設定用関数 乱数生成関数
整数乱数 init_irnd(init, rnd, seed) int irnd(max, min)
正規分布乱数 init_gaussd(init, rnd, seed) double gaussd(μ, σ)
三角分布乱数 init_tri_rand(init, rnd, seed) double tri_rand()
指数分布乱数 init_exp_rand(init, rnd, seed) double exp_rand()
2変量正規分布乱数 init_binormal(init, rnd, seed) void binormal(r, x, y)
ベクトル乱数 init_rnd_vector(init, rnd, seed) void rnd_vector(x, y)
3次元ベクトル乱数 init_rnd_vector3(init, rnd, seed) void rnd_vector3(x, y, z)
  • 注1:max:最大値(int 型), min:最小値(int 型)
  • 注2:μ:平均値(double 型), σ:分散(double 型),r : 相関係数(double 型)
  • 注3:x,y,z は,関数返り値(生成乱数)が複数個の返り値用 double 型ポインタ。

(3)ランダムデータ生成関数                index (目次に戻る)

関数名及び型 引数及び型 機能
void init_mkdata(initfunc, func, seed) void (*initfunc)( );
double (*func)( );
long seed;
初期化
int *mkdata_i(n, min, max) int n, min, max; int 型配列データ生成
unsigned char *mkdata_c(n, min, max) int n;
unsigned char min, max;
文字列生成
double *mkdata_d(n, min, max) int n;
double min, max;
double 型配列生成
unsigned char **mkdata_s(n, smin, smax, min, max) int n, smin, smax;
unsigned char min, max;
文字列配列生成
unsigned char **mkdata_sd(n, smin, smax, min, max) int n, smin, smax;
unsigned char min, max;
文字列配列生成
(重複データ排除)
  • 注1:各ランダムデータ生成用関数を呼び出す前に init_mkdata( ) を1度実行します。
    一様乱数関数用の初期設定用関数名(init),乱数生成関数(rnd)名及び種(seed)を引数として渡します。
    (init_mkdata( )内部で irnd( )を使用している。)
    なお、prnd 系の乱数ルーチンは初期設定用の関数型が異なるので使用できません。

  • 注2:min, max は,生成するデータの範囲です。(文字列はキャラクタデータを指定します。)
    smin, smax は,生成する文字列長の範囲です。

(4)データ撹拌関数               index (目次に戻る)

関数名及び型 引数名及び型
void shuffle_i(ai, n, seed) int *ai;
int n;
long seed;
void shuffle_d(ad, n, seed) double *ad;
int n;
long seed;
void shuffle_c(ac, n, seed) unsigned char **ac;
int n;
long seed;


(5) 無作為抽出関数

一様乱数を内部で使用するため,初期設定関数に対して,一様乱数関数用の初期設定用関数名(init)、乱数生成関数(rnd)名及び種(seed)をこの順番で引数として渡します。
init と rnd は必ず上記に示した一様乱数関数の組で渡して下さい。
関数名及び型 引数名及び型 機能
void init_pickup(init, rnd , seed) void (*init)( );
double (*rnd)( );
long seed;
初期化
void pickup(m, n, pick) int m, n, *pick; 無作為抽出関数
( m : 母数,n : サンプル数,サンプルNo.配列 )

(6)その他                 index (目次に戻る)

本ライブラリ中で下記関数や変数を使用しているので2重定義しないで下さい。
  • 関数
    _error( ), rnd521( ), bcal( ), ecal1( ), ecal2( )

    _pname( ), _func( ), _init( ), _func_p( ), _init_p( ), _rand( ), _tri( )

  • 変数
    _idum_u0, _idum_u1, _idum_u2, _idum_u3, _idum_u4, _idum_u5, _idum_u6
    _rx, _prx, _prx_end, r_s1, r_s2, r_s3,
    _idum_o0, _idum_o1, _idum_o2, _idum_b, b_nd, b_iy, b_iv
    _idum_e1, _idum_e2, e_nd, e_iy, e_iv, k_ma, k_ma_end
    pk1, pk2, _idum_d, _idum_q
    _idum_p0, _idum_p1, _idum_p2, _idum_p3, _idum_p4, _idum_p5, _idum_p6
    _idum_p7, _idum_p8, _idum_p9, _idum_p10, _idum_p11, _idum_p12,
    _idum_p13, _idum_p14, _idum_p15, _idum_p16, _idum_p17, _idum_p18
    _idum_p19, _idum_p20, _idum_p21, _idum_p22, _idum_p23, _idum_p24,
    _idum_p25, _idum_p26, _idum_p27, _idum_p28, _idum_p29, _idum_p30, _idum_p31, _idum_p32, _idum_p33