/* 合同法による乱数発生 */

static int seed;

void _srandG(int seed0)
// 系列を設定する
{
	seed=seed0;
}

int randG(int base)
// rand()と同等のバラ付きの乱数発生ルーチン
// 速度もほぼ同等
// 系列は固定なので、変化させる時はsrandG()を使う
{
#define a	48271	// 16807
#define	m	2147483647
#define	q	(m/a)	// 127773
#define	r	(m%a)	// 2836
int lo,hi,test;
	hi=seed/q;
	lo=seed%q;
	test=a*lo-r*hi;
	if (test>0) seed=test;
	else seed=test+m;
	return(seed%base);
}

#include	<iocslib.h>	// ONTIME()
#include	"anum.h"	// rand2()

void srandG()
/* randG()乱数を初期化する */
{
	_srandG(rand2(ONTIME()));
	/* 乱数系列の初期化に別の乱数を使うとは・・・ */
}
