Skip to content

Commit a2ffe3e

Browse files
weeellzbradfitz
authored andcommitted
math/rand: refactor rng.go
Made constant names more idiomatic, moved some constants to function seedrand, and found better name for _M. Change-Id: I192172f398378bef486a5bbceb6ba86af48ebcc9 Reviewed-on: https://go-review.googlesource.com/107135 Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gobot Gobot <gobot@golang.org>
1 parent aba0775 commit a2ffe3e

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

src/math/rand/rng.go

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,16 @@ package rand
1212
*/
1313

1414
const (
15-
_LEN = 607
16-
_TAP = 273
17-
_MAX = 1 << 63
18-
_MASK = _MAX - 1
19-
_A = 48271
20-
_M = (1 << 31) - 1
21-
_Q = 44488
22-
_R = 3399
15+
rngLen = 607
16+
rngTap = 273
17+
rngMax = 1 << 63
18+
rngMask = rngMax - 1
19+
int32max = (1 << 31) - 1
2320
)
2421

2522
var (
26-
// Used for seeding. See gen_cooked.go for details.
27-
rng_cooked [_LEN]int64 = [...]int64{
23+
// rngCooked used for seeding. See gen_cooked.go for details.
24+
rngCooked [rngLen]int64 = [...]int64{
2825
-4181792142133755926, -4576982950128230565, 1395769623340756751, 5333664234075297259,
2926
-6347679516498800754, 9033628115061424579, 7143218595135194537, 4812947590706362721,
3027
7937252194349799378, 5307299880338848416, 8209348851763925077, -7107630437535961764,
@@ -181,37 +178,43 @@ var (
181178
)
182179

183180
type rngSource struct {
184-
tap int // index into vec
185-
feed int // index into vec
186-
vec [_LEN]int64 // current feedback register
181+
tap int // index into vec
182+
feed int // index into vec
183+
vec [rngLen]int64 // current feedback register
187184
}
188185

189186
// seed rng x[n+1] = 48271 * x[n] mod (2**31 - 1)
190187
func seedrand(x int32) int32 {
191-
hi := x / _Q
192-
lo := x % _Q
193-
x = _A*lo - _R*hi
188+
const (
189+
A = 48271
190+
Q = 44488
191+
R = 3399
192+
)
193+
194+
hi := x / Q
195+
lo := x % Q
196+
x = A*lo - R*hi
194197
if x < 0 {
195-
x += _M
198+
x += int32max
196199
}
197200
return x
198201
}
199202

200203
// Seed uses the provided seed value to initialize the generator to a deterministic state.
201204
func (rng *rngSource) Seed(seed int64) {
202205
rng.tap = 0
203-
rng.feed = _LEN - _TAP
206+
rng.feed = rngLen - rngTap
204207

205-
seed = seed % _M
208+
seed = seed % int32max
206209
if seed < 0 {
207-
seed += _M
210+
seed += int32max
208211
}
209212
if seed == 0 {
210213
seed = 89482311
211214
}
212215

213216
x := int32(seed)
214-
for i := -20; i < _LEN; i++ {
217+
for i := -20; i < rngLen; i++ {
215218
x = seedrand(x)
216219
if i >= 0 {
217220
var u int64
@@ -220,27 +223,27 @@ func (rng *rngSource) Seed(seed int64) {
220223
u ^= int64(x) << 20
221224
x = seedrand(x)
222225
u ^= int64(x)
223-
u ^= rng_cooked[i]
226+
u ^= rngCooked[i]
224227
rng.vec[i] = u
225228
}
226229
}
227230
}
228231

229232
// Int63 returns a non-negative pseudo-random 63-bit integer as an int64.
230233
func (rng *rngSource) Int63() int64 {
231-
return int64(rng.Uint64() & _MASK)
234+
return int64(rng.Uint64() & rngMask)
232235
}
233236

234237
// Uint64 returns a non-negative pseudo-random 64-bit integer as an uint64.
235238
func (rng *rngSource) Uint64() uint64 {
236239
rng.tap--
237240
if rng.tap < 0 {
238-
rng.tap += _LEN
241+
rng.tap += rngLen
239242
}
240243

241244
rng.feed--
242245
if rng.feed < 0 {
243-
rng.feed += _LEN
246+
rng.feed += rngLen
244247
}
245248

246249
x := rng.vec[rng.feed] + rng.vec[rng.tap]

0 commit comments

Comments
 (0)