annotate TaskManager/kernel/ppe/Random.cc @ 514:2659376067e8

old ball_bound fix...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 20 Oct 2009 21:18:28 +0900
parents 4435c9990988
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
229
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
1 #include <stdio.h>
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
2 #include <stdlib.h>
230
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
3 #include <sys/time.h>
229
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
4 #include "Random.h"
370
4435c9990988 change TaskManger & memory/* & Random
aaa
parents: 230
diff changeset
5 #define HAS_SRANDOMDEV 1
229
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
6
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
7 /**
230
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
8 * /dev/urandom, random から取得した値を seed として使う
229
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
9 */
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
10 Random::Random(void)
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11 {
230
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
12 reset();
229
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13 }
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
15 /**
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
16 * 引数で seed を指定する
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17 */
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18 Random::Random(unsigned int seed)
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
19 {
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20 srandom(seed);
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
21 }
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22
230
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
23 void
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
24 Random::reset(void)
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
25 {
370
4435c9990988 change TaskManger & memory/* & Random
aaa
parents: 230
diff changeset
26 #if HAS_SRANDOMDEV
230
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
27 FILE *fp;
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
28 unsigned int seed;
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
29 struct timeval tv;
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
30
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
31 fp = fopen("/dev/urandom", "r");
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
32 if (!fp) fp = fopen("/dev/random", "r");
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
33
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
34 if (fp) {
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
35 int res = fread(&seed, sizeof(unsigned int), 1, fp);
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
36 if (res != sizeof(unsigned int)) {
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
37 fclose(fp);
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
38 fp = NULL;
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
39 }
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
40 }
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
41
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
42 if (!fp) {
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
43 gettimeofday(&tv, NULL);
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
44 seed = (tv.tv_sec ^ tv.tv_usec);
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
45 } else {
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
46 fclose(fp);
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
47 }
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
48
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
49 srandom(seed);
370
4435c9990988 change TaskManger & memory/* & Random
aaa
parents: 230
diff changeset
50 #else
4435c9990988 change TaskManger & memory/* & Random
aaa
parents: 230
diff changeset
51 srandomdev();
4435c9990988 change TaskManger & memory/* & Random
aaa
parents: 230
diff changeset
52 #endif
230
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
53 }
2b114977852d fix Random
gongo@localhost.localdomain
parents: 229
diff changeset
54
370
4435c9990988 change TaskManger & memory/* & Random
aaa
parents: 230
diff changeset
55 /*!
4435c9990988 change TaskManger & memory/* & Random
aaa
parents: 230
diff changeset
56 1 から 2^(32-1) のランダムな数値を返す。
4435c9990988 change TaskManger & memory/* & Random
aaa
parents: 230
diff changeset
57 */
4435c9990988 change TaskManger & memory/* & Random
aaa
parents: 230
diff changeset
58
229
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
59 int
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
60 Random::getData(void)
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
61 {
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
62 return random();
401b55a4a4dd add Random class
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
63 }