[ create a new paste ] login | about

Link: http://codepad.org/ftLI0y9P    [ raw code | output | fork ]

C, pasted on Nov 17:
#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;
}


Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
-- LCGs --
  0: 4fe6b1d5
  1: 6f26cdea
  2: 533f28db
  3: 64b94f78
  4: 47ed9651
  5: 579bdeb6
  6: 41fd77b7
  7: 61efeb24
  8: 4ea4468d
  9: 677f3042
 10: 66e7d853
 11: 57d29590
 12: 4b9bbe89
 13: 4c540e8e
 14: 6c0da6af
 15: 04f37abc
 16: 7478ba45
 17: 7686859a
 18: 6317fecb
 19: 1cdb86a8
 20: 7a6fb5c1
 21: 3f376166
 22: 0525bca7
 23: 00b66554
 24: 1380ecfd
 25: 1ec82df2
 26: 14677c43
 27: 56be82c0
 28: 5b745bf9
 29: 4027373e
 30: 3b7b999f
 31: 2c690aec
 32: 4895beb5
 33: 7cdb894a
 34: 068a30bb
 35: 0f51e9d8
 36: 30309131
 37: 0dd0f016
 38: 52211d97
 39: 48e7cb84
 40: 16cc0f6d
 41: 7ce3f7a2
 42: 4bcffc33
 43: 28d81bf0
 44: 48273569
 45: 232debee
 46: 6084288f
 47: 0a3b071c
 48: 72f4bf25
 49: 4010d8fa
 50: 34a4beab
 51: 7f7f7908
 52: 445728a1
 53: 75038ac6
 54: 01ee9a87
 55: 51171db4
 56: 3f1caddd
 57: 321d8d52
 58: 77105823
 59: 3ae26120
 60: 4abb4ad9
 61: 5f632c9e
 62: 7506537f
 63: 145c6f4c
 64: 360cbb95
 65: 4ed174aa
 66: 4636a89b
 67: 4f873438
 68: 29ca7c11
 69: 432a3176
 70: 2b4d3377
 71: 7a975be4
 72: 46c9c84d
 73: 177fef02
 74: 59d79013
 75: 30605250
 76: 6bf79c49
 77: 5381f94e
 78: 48a11a6f
 79: 2380437c
 80: 6014b405
 81: 38885c5a
 82: 65ceee8b
 83: 304c1b68
 84: 5b318b81
 85: 135fe426
 86: 12bbe867
 87: 217b8614
 88: 2bea5ebd
 89: 5ed61cb2
 90: 0194a403
 91: 1394ef80
 92: 746329b9
 93: 030551fe
 94: 50b37d5f
 95: 231983ac
 96: 3b03a875
 97: 3d60900a
 98: 7fbc907b
 99: 51712e98
100: 4af356f1
101: 7d7fa2d6
102: 1a79b957
103: 4c969c44
104: 2055712d
105: 42ab1662
106: 357693f3
107: 058338b0
108: 5c44f329
109: 462836ae
110: 185c7c4f
111: 415b2fdc
112: 7c9098e5
113: 7e450fba
114: 320e8e6b
115: 11596dc8
116: 5336de61
117: 46246d86
118: 3285a647
119: 5d7b9e74
120: 79a1ff9d
121: 3649dc12
122: 666c5fe3
123: 6dee2de0
124: 3ba3f899
125: 79e5a75e
126: 307b173f
127: 1f38480c
128: 36328555
129: 2ce0db6a
130: 3c93e85b
131: 2d27d8f8
132: 25e321d1
133: 0ea94436
134: 489eaf37
135: 407d8ca4
136: 21270a0d
137: 15bd6dc2
138: 1f2507d3
139: 2b58cf10
140: 3a473a09
141: 2ff8a40e
142: 1fae4e2f
143: 0063cc3c
144: 45206dc5
145: 3b9ef31a
146: 70db9e4b
147: 70bf7028
148: 3c9f2141
149: 052926e6
150: 3843d427
151: 1caf66d4
152: 03fb907d
153: 55d0cb72
154: 740f8bc3
155: 43061c40
156: 7fb5b779
157: 5edc2cbe
158: 5255211f
159: 7b50bc6c
160: 42515235
161: 0daa56ca
162: 2234b03b
163: 66c33358
164: 48d1dcb1
165: 147f1596
166: 3ab41517
167: 03e42d04
168: 02f692ed
169: 340ef522
170: 735aebb3
171: 10f91570
172: 233670e9
173: 11cb416e
174: 0a8e900f
175: 2932189c
176: 727c32a5
177: 26ee067a
178: 15ae1e2b
179: 08962288
180: 23a25421
181: 14461046
182: 56ee7207
183: 22aedf34
184: 62af115d
185: 66c2ead2
186: 14f627a3
187: 77f4baa0
188: 1bd06659
189: 18c0e21e
190: 50399aff
191: 55fae0cc
192: 36180f15
193: 5c15022a
194: 7216e81b
195: 6e5b3db8
196: 3df78791
197: 78d916f6
198: 51b1eaf7
199: 70627d64
-- Lagged Fibonacci --
  0: af4e0528
  1: 8ebac27a
  2: 91225a64
  3: f73b9b79
  4: e656a130
  5: d31fd21b
  6: 592b869d
  7: 34fae7bd
  8: 3a9f025d
  9: c0135ef0
 10: 8ccd7d4d
 11: 863ac0e6
 12: 0c676d7e
 13: f8db23fc
 14: 8b2e3ba2
 15: 80e027c3
 16: 6f61a996
 17: ee463a6d
 18: 9dbbae6b
 19: e9d15f57
 20: 2d7d9bd3
 21: a2e16b12
 22: ea87c4ab
 23: 40fe88d0
 24: c1a99904
 25: feef40ee
 26: 97bd0b90
 27: 1d1df4fd
 28: 3f16782c
 29: d338a52f
 30: 4986ffe9
 31: ee647d54
 32: 61f367a9
 33: daa95a4d
 34: e5a018cd
 35: 484a08d9
 36: adc92c68
 37: 3ecb9f6a
 38: 7d44f096
 39: e8682ec5
 40: fedefe5a
 41: 0a126de3
 42: 6ea2efab
 43: 0b466bd8
 44: 02ed91df
 45: f9d12b4d
 46: 8c26939b
 47: 724f3b75
 48: e81765ba
 49: 29e24206
 50: 5c209acc
 51: 1595018d
 52: ccc3ad18
 53: 46a85f77
 54: 56938a5d
 55: 8e6d461c
 56: 4597a065
 57: ee5095ed
 58: ab8b3b19
 59: 84ae1891
 60: c1893b1c
 61: f5123b02
 62: 731295e5
 63: 237ca2c5
 64: cfbb954f
 65: 58b2aeb2
 66: 6bc6ab9e
 67: 7d84c1b7
 68: 977e4e1c
 69: e90b9c34
 70: 65ecf07c
 71: 965d4c76
 72: f31e0a17
 73: d48fe027
 74: a1a3b84e
 75: f60b9bf6
 76: ce610b74
 77: 2dca4be9
 78: 685ad76b
 79: b678712e
 80: 57ac8def
 81: c47b7237
 82: cc0d72bb
 83: 24703b07
 84: 0b23d1ae
 85: 22a0fd18
 86: b2dd8123
 87: 50bb7213
 88: 10f19305
 89: 5e68bc3c
 90: d5698aa4
 91: d27ace21
 92: 537af73e
 93: 487c2089
 94: f5f770e6
 95: 23368c8d
 96: a12ecf3b
 97: 61be1c84
 98: a0bb4e44
 99: 38ad1d57
100: 4ac9b8b8
101: 06a83ec0
102: cf0a69cd
103: 3de7c2cf
104: db381ee7
105: 70ae221b
106: 33f35ec5
107: a9992a5b
108: 9e786e04
109: 9c4e3630
110: 60119b89
111: f624fbf3
112: 60c9a867
113: 2c1f0e44
114: 1a9536fa
115: 6bed7a15
116: 4ec00b5c
117: cd72b81d
118: bca8ec28
119: 5fb19e61
120: 2bdb7459
121: 921276cc
122: 322c6c82
123: 7f566b97
124: da8e9755
125: 2823dd68
126: a28cf824
127: 7bbd6690
128: 89e1f9ec
129: 43484668
130: b46a83e7
131: d4abb2a4
132: 49f08528
133: 8374edb4
134: 12937573
135: 2528a40f
136: f4230fcf
137: 4686d438
138: cec1ce6a
139: 929b7dd3
140: e2d50a68
141: 2ed369f3
142: 88c079c6
143: 439eb2cf
144: 5af27837
145: a355b0c0
146: af8c2ce4
147: a9b28393
148: 70c868dd
149: 6c35190c
150: 096421f4
151: 9ca3dd36
152: fe478fd8
153: 3b908e76
154: 1bfa48cd
155: d8d6272d
156: 63b46bde
157: be8740f1
158: 54938dbd
159: ed9665ca
160: 01cf8759
161: 08fe11a4
162: c242186e
163: 4bc00c81
164: 8c72ff58
165: d4d58de1
166: 70e8b090
167: 80960f27
168: 1b5c6219
169: 3faa7efa
170: 13318cfa
171: fe316c81
172: 6e7de8ed
173: 9bf206c0
174: 41d01f50
175: c9706124
176: 3f47b780
177: f15c4c34
178: 7322e4b7
179: b010205d
180: 5d916540
181: 7c8706ab
182: 4cb3fd93
183: 5bd8f518
184: b8179521
185: 68ae4660
186: 34af1c45
187: 1bcc00ff
188: 27358751
189: 8942aa02
190: 096266c9
191: 29050eaa
192: 9240bba6
193: cba47f37
194: 74c51b2b
195: 1eb3bafe
196: a07a0d18
197: e5adcbbb
198: 9f49ca25
199: bbd66f31


Create a new paste based on this one


Comments: