@@ -17,6 +17,17 @@ const (
17
17
F_PRIME3 float32 = 30323
18
18
)
19
19
20
+ type Rand interface {
21
+ //并发不安全的随机0-1之间的小数(包括0不包括1)
22
+ UniformFloat () float32
23
+ //并发安全的随机0-1之间的小数(包括0不包括1)
24
+ SyncUniformFloat () float32
25
+ //并发不安全的随机min-max之间的小数(包括min和max)
26
+ UniformInt (min int , max int ) int
27
+ //并发不安全的随机max-max之间的小数(包括min和max)
28
+ SyncUniformInt (min int , max int ) int
29
+ }
30
+
20
31
type _rand struct {
21
32
_mut sync.Mutex
22
33
prime1 int
@@ -25,23 +36,21 @@ type _rand struct {
25
36
}
26
37
27
38
var (
28
- _globalRand * _rand = Seed ()
39
+ _globalRand Rand = Seed ()
29
40
_globalSeed int
30
41
_globalMut sync.Mutex
31
42
)
32
43
33
44
//构造一个随机器
34
- func Seed () * _rand {
35
- _globalMut .Lock ()
36
- addp := _globalSeed
37
- _globalSeed ++
38
- _globalMut .Unlock ()
39
-
40
- ms := time .Now ().Nanosecond () / 1000000
41
- prime1 := ms / 1000000000
42
- ms = ms - prime1
43
- prime2 := ms / 1000 + addp + 1
44
- prime3 := (ms - prime2 )* 1000 + addp + 2
45
+ func Seed () Rand {
46
+ return SeedInt (0 )
47
+ }
48
+
49
+ //构造一个随机器(带个随机值)
50
+ func SeedInt (s int ) Rand {
51
+ prime1 := time .Now ().Nanosecond ()
52
+ prime2 := prime1 / 1000 + s + 1
53
+ prime3 := (prime1 - prime2 )* 1000 + s + 2
45
54
return & _rand {prime1 : prime1 , prime2 : prime2 , prime3 : prime3 }
46
55
}
47
56
@@ -66,14 +75,14 @@ func GlobalSyncUniformFloat() float32 {
66
75
return _globalRand .SyncUniformFloat ()
67
76
}
68
77
69
- //全局并发不安全的随机1-max之间的小数 (包括1和max)
70
- func GlobalUniformInt (max int ) int {
71
- return _globalRand .UniformInt (max )
78
+ //全局并发不安全的随机min-max之间的整数 (包括1和max)
79
+ func GlobalUniformInt (min int , max int ) int {
80
+ return _globalRand .UniformInt (min , max )
72
81
}
73
82
74
- //全局并发不安全的随机1-max之间的小数 (包括1和max)
75
- func GlobalSyncUniformInt (max int ) int {
76
- return _globalRand .SyncUniformInt (max )
83
+ //全局并发不安全的随机1-max之间的整数 (包括1和max)
84
+ func GlobalSyncUniformInt (min int , max int ) int {
85
+ return _globalRand .SyncUniformInt (min , max )
77
86
}
78
87
79
88
//并发不安全的随机0-1之间的小数(包括0不包括1)
@@ -91,19 +100,19 @@ func (_r *_rand) SyncUniformFloat() float32 {
91
100
return r
92
101
}
93
102
94
- //并发不安全的随机1 -max之间的小数(包括1和max)
95
- func (_r * _rand ) UniformInt (max int ) int {
96
- if max < 1 {
103
+ //并发不安全的随机min -max之间的小数(包括1和max)
104
+ func (_r * _rand ) UniformInt (min int , max int ) int {
105
+ if max < min {
97
106
panic ("random UniformInt param max must >= 1" )
98
107
}
99
108
f := _r .UniformFloat ()
100
- return int (f * float32 (max )) + 1
109
+ return int (f * float32 (max - min )) + min
101
110
}
102
111
103
- //并发不安全的随机1 -max之间的小数(包括1和max)
104
- func (_r * _rand ) SyncUniformInt (max int ) int {
112
+ //并发不安全的随机max -max之间的小数(包括1和max)
113
+ func (_r * _rand ) SyncUniformInt (min int , max int ) int {
105
114
_r ._mut .Lock ()
106
- r := _r .UniformInt (max )
115
+ r := _r .UniformInt (min , max )
107
116
_r ._mut .Unlock ()
108
117
return r
109
118
}
0 commit comments