codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <stdio.h> #include <time.h> /* 問題1:線形合同法により乱数を作って200個値を出力してください 問題2:ラグ付フィボナッチ法により乱数を作って200個の値を出力してください。 ただしx[0]~x[31]は線形合同法により初期化します・ 問題3:mt_algo.cのmain.cを作成して分割コンパイルし実行しなさい */ /* 問題1 */ static unsigned long myrand_x; /* myrand用 前回のrand結果 */ void mysrand(unsigned long x){ myrand_x = x; } unsigned long myrand(){ return ( myrand_x = (1103515245UL * myrand_x + 12345) & 0x7FFFFFFF ); } /* 問題2 */ #define BUFSIZE 32 /* 2のべき乗限定 */ #define BUFSIZEMASK BUFSIZE-1 static unsigned long myrandom_x[BUFSIZE]; /* myrandom用 乱数配列 */ static unsigned int myrandom_i; /* myrandom用 次回インデックス */ void mysrandom(unsigned long x){ int i; mysrand(x); for(i=0;i<BUFSIZE;i++){ myrandom_x[i] = myrand(); } myrandom_i = 0; } unsigned long myrandom(){ unsigned int i = myrandom_i; myrandom_i = (i+1) & BUFSIZEMASK; return ( myrandom_x[i] = myrandom_x[ (i+BUFSIZE-3 ) & BUFSIZEMASK ] + myrandom_x[ (i+BUFSIZE-31) & BUFSIZEMASK ] ); } /* 問題3 */ #define KEYLEN 100 void mt_seed(unsigned int s); void init_by_array(unsigned long init_key[], int key_length); unsigned long genrand_int32(void); long genrand_int31(void); double genrand_real1(void); double genrand_real2(void); double urand(void); int nrand(int n); double genrand_res53(void); int main(){ int i; unsigned long init_key[KEYLEN]; /* 問題1 */ printf("-- LCGs --\n"); mysrand(time(NULL)); for(i=0;i<200;i++){ printf("%3d: %08lx\n",i,myrand()); } /* 問題2 */ printf("-- Lagged Fibonacci --\n"); mysrandom(time(NULL)); for(i=0;i<200;i++){ printf("%3d: %08lx\n",i,myrandom()); } /* 問題3 *//* 全部の関数が呼べればOK?問題がよくわからん */ #if 0 mt_seed(time(NULL)); printf("genrand_int32: %08lx\n",genrand_int32()); printf("genrand_int31: %08lx\n",genrand_int31()); printf("genrand_real1: %f\n",genrand_real1()); printf("genrand_real2: %f\n",genrand_real2()); printf("urand : %f\n",urand()); printf("nrand(10) : %d\n",nrand(10)); printf("nrand(100) : %d\n",nrand(100)); printf("genrand_res53: %.16f\n",genrand_res53()); mysrandom(time(NULL)); for(i=0;i<KEYLEN;i++){ init_key[i]=myrandom(); } init_by_array(init_key,KEYLEN); printf("genrand_int32: %08lx\n",genrand_int32()); printf("genrand_int31: %08lx\n",genrand_int31()); printf("genrand_real1: %f\n",genrand_real1()); printf("genrand_real2: %f\n",genrand_real2()); printf("urand : %f\n",urand()); printf("nrand(10) : %d\n",nrand(10)); printf("nrand(100) : %d\n",nrand(100)); printf("genrand_res53: %.16f\n",genrand_res53()); #endif return 0; }
Private
[
?
]
Run code
Submit