乱数の生成

/****************************/
/* 乱数の生成               */
/*      coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <limits.h>

int uniform(int);

main()
{
	double r;
	int i1, k, x1 = 123, x2, sum[10] = {0};

	for (i1 = 0; i1 < 1000000; i1++) {
		x2 = uniform(x1);
		x1 = x2;
		r  = (double)x2 / INT_MAX;
		r  = (r + 1.0) / 2.0;
		k  = (int)(r / 0.1);
		if (k < 0)
			k = 0;
		else if (k > 9)
			k = 9;
		sum[k]++;
	}

	for (i1 = 0; i1 < 10; i1++)
		printf("%f\n", sum[i1]/1000000.0);

	return 0;
}

/******************************/
/* 混合合同法による乱数の生成 */
/******************************/
int uniform(int x)
{
	return 262145 * x + 17;
}