math/rand: add Rand.Uint64

This adds Uint64 methods to Rand and rngSource.
Rand.Uint64 uses Source.Uint64 directly if it is present.

rngSource.Uint64 provides access to all 64 bits generated by the
underlying ALFG. To ensure high seed quality a 64th bit has been added
to all elements of the array of "cooked" random numbers that are used
for seeding. gen_cooked.go generates both the 63 bit and 64 bit array.

Fixes #4254

Change-Id: I22855618ac69abae3d2799b3e7e59996d4c5a4b1
Reviewed-on: https://go-review.googlesource.com/27253
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Florian Uekermann 2016-08-17 18:45:57 +02:00 committed by Brad Fitzpatrick
parent 998419575f
commit 003a598bf2
4 changed files with 204 additions and 149 deletions

View file

@ -33,6 +33,7 @@ func TestConcurrent(t *testing.T) {
seed += int64(Int63n(Int63()))
seed += int64(NormFloat64())
seed += int64(Uint32())
seed += int64(Uint64())
for _, p := range Perm(10) {
seed += int64(p)
}

View file

@ -23,6 +23,14 @@ type Source interface {
Seed(seed int64)
}
// A source64 represents a Source, which is also a source
// of uniformly-distributed pseudo-random uint64 values in
// the range [0, 1<<64).
type source64 interface {
Source
Uint64() uint64
}
// NewSource returns a new pseudo-random Source seeded with the given value.
// Unlike the default Source used by top-level functions, this source is not
// safe for concurrent use by multiple goroutines.
@ -35,6 +43,7 @@ func NewSource(seed int64) Source {
// A Rand is a source of random numbers.
type Rand struct {
src Source
s64 source64 // non-nil if src is source64
// readVal contains remainder of 63-bit integer used for bytes
// generation during most recent Read call.
@ -48,7 +57,10 @@ type Rand struct {
// New returns a new Rand that uses random values from src
// to generate other random values.
func New(src Source) *Rand { return &Rand{src: src} }
func New(src Source) *Rand {
s64, _ := src.(source64)
return &Rand{src: src, s64: s64}
}
// Seed uses the provided seed value to initialize the generator to a deterministic state.
// Seed should not be called concurrently with any other Rand method.
@ -68,6 +80,14 @@ func (r *Rand) Int63() int64 { return r.src.Int63() }
// Uint32 returns a pseudo-random 32-bit value as a uint32.
func (r *Rand) Uint32() uint32 { return uint32(r.Int63() >> 31) }
// Uint64 returns a pseudo-random 64-bit value as a uint64.
func (r *Rand) Uint64() uint64 {
if r.s64 != nil {
return r.s64.Uint64()
}
return uint64(r.Int63())>>31 | uint64(r.Int63())<<32
}
// Int31 returns a non-negative pseudo-random 31-bit integer as an int32.
func (r *Rand) Int31() int32 { return int32(r.Int63() >> 32) }
@ -209,7 +229,7 @@ func read(p []byte, int63 func() int64, readVal *int64, readPos *int8) (n int, e
* Top-level convenience functions
*/
var globalRand = New(&lockedSource{src: NewSource(1)})
var globalRand = New(&lockedSource{src: NewSource(1).(source64)})
// Seed uses the provided seed value to initialize the default Source to a
// deterministic state. If Seed is not called, the generator behaves as
@ -226,6 +246,10 @@ func Int63() int64 { return globalRand.Int63() }
// from the default Source.
func Uint32() uint32 { return globalRand.Uint32() }
// Uint64 returns a pseudo-random 64-bit value as a uint64
// from the default Source.
func Uint64() uint64 { return globalRand.Uint64() }
// Int31 returns a non-negative pseudo-random 31-bit integer as an int32
// from the default Source.
func Int31() int32 { return globalRand.Int31() }
@ -288,7 +312,7 @@ func ExpFloat64() float64 { return globalRand.ExpFloat64() }
type lockedSource struct {
lk sync.Mutex
src Source
src source64
}
func (r *lockedSource) Int63() (n int64) {
@ -298,6 +322,13 @@ func (r *lockedSource) Int63() (n int64) {
return
}
func (r *lockedSource) Uint64() (n uint64) {
r.lk.Lock()
n = r.src.Uint64()
r.lk.Unlock()
return
}
func (r *lockedSource) Seed(seed int64) {
r.lk.Lock()
r.src.Seed(seed)

View file

@ -381,4 +381,24 @@ var regressGolden = []interface{}{
uint32(75079301), // Uint32()
uint32(3380456901), // Uint32()
uint32(3433369789), // Uint32()
uint64(8717895732742165505), // Uint64()
uint64(2259404117704393152), // Uint64()
uint64(6050128673802995827), // Uint64()
uint64(9724605487393973602), // Uint64()
uint64(12613765599614152010), // Uint64()
uint64(11893357769247901871), // Uint64()
uint64(1774932891286980153), // Uint64()
uint64(15267744271532198264), // Uint64()
uint64(17498302081433670737), // Uint64()
uint64(1543572285742637646), // Uint64()
uint64(11885104867954719224), // Uint64()
uint64(17548432336275752516), // Uint64()
uint64(7837839688282259259), // Uint64()
uint64(2518412263346885298), // Uint64()
uint64(5617773211005988520), // Uint64()
uint64(11562935753659892057), // Uint64()
uint64(16368296284793757383), // Uint64()
uint64(161231572858529631), // Uint64()
uint64(16482847956365694147), // Uint64()
uint64(16596477517051940556), // Uint64()
}

View file

@ -23,161 +23,159 @@ const (
)
var (
// cooked random numbers
// the state of the rng
// after 780e10 iterations
// Used for seeding. See gen_cooked.go for details.
rng_cooked [_LEN]int64 = [...]int64{
5041579894721019882, 4646389086726545243, 1395769623340756751, 5333664234075297259,
2875692520355975054, 9033628115061424579, 7143218595135194537, 4812947590706362721,
7937252194349799378, 5307299880338848416, 8209348851763925077, 2115741599318814044,
4593015457530856296, 8140875735541888011, 3319429241265089026, 8619815648190321034,
1727074043483619500, 113108499721038619, 4569519971459345583, 5062833859075314731,
2387618771259064424, 2716131344356686112, 6559392774825876886, 7650093201692370310,
7684323884043752161, 257867835996031390, 6593456519409015164, 271327514973697897,
2789386447340118284, 1065192797246149621, 3344507881999356393, 4459797941780066633,
7465081662728599889, 1014950805555097187, 4449440729345990775, 3481109366438502643,
-4181792142133755926, -4576982950128230565, 1395769623340756751, 5333664234075297259,
-6347679516498800754, 9033628115061424579, 7143218595135194537, 4812947590706362721,
7937252194349799378, 5307299880338848416, 8209348851763925077, -7107630437535961764,
4593015457530856296, 8140875735541888011, -5903942795589686782, -603556388664454774,
-7496297993371156308, 113108499721038619, 4569519971459345583, -4160538177779461077,
-6835753265595711384, -6507240692498089696, 6559392774825876886, 7650093201692370310,
7684323884043752161, -8965504200858744418, -2629915517445760644, 271327514973697897,
-6433985589514657524, 1065192797246149621, 3344507881999356393, -4763574095074709175,
7465081662728599889, 1014950805555097187, -4773931307508785033, -5742262670416273165,
2418672789110888383, 5796562887576294778, 4484266064449540171, 3738982361971787048,
4523597184512354423, 10530508058128498, 8633833783282346118, 2625309929628791628,
8660405965245884302, 10162832508971942, 6540714680961817391, 7031802312784620857,
6240911277345944669, 831864355460801054, 8004434137542152891, 2116287251661052151,
-4699774852342421385, 10530508058128498, -589538253572429690, -6598062107225984180,
8660405965245884302, 10162832508971942, -2682657355892958417, 7031802312784620857,
6240911277345944669, 831864355460801054, -1218937899312622917, 2116287251661052151,
2202309800992166967, 9161020366945053561, 4069299552407763864, 4936383537992622449,
457351505131524928, 342195045928179354, 2847771682816600509, 2068020115986376518,
4368649989588021065, 887231587095185257, 5563591506886576496, 6816225200251950296,
5616972787034086048, 8471809303394836566, 1686575021641186857, 4045484338074262002,
4244156215201778923, 7848217333783577387, 5632136521049761902, 833283142057835272,
9029726508369077193, 3243583134664087292, 4316371101804477087, 8937849979965997980,
6446940406810434101, 1679342092332374735, 6050638460742422078, 6993520719509581582,
7640877852514293609, 5881353426285907985, 812786550756860885, 4541845584483343330,
2725470216277009086, 4980675660146853729, 5210769080603236061, 8894283318990530821,
6326442804750084282, 1495812843684243920, 7069751578799128019, 7370257291860230865,
6756929275356942261, 4706794511633873654, 7824520467827898663, 8549875090542453214,
33650829478596156, 1328918435751322643, 7297902601803624459, 1011190183918857495,
2238025036817854944, 5147159997473910359, 896512091560522982, 2659470849286379941,
6097729358393448602, 1731725986304753684, 4106255841983812711, 8327155210721535508,
8477511620686074402, 5803876044675762232, 8435417780860221662, 5988852856651071244,
4715837297103951910, 7566171971264485114, 505808562678895611, 5070098180695063370,
842110666775871513, 572156825025677802, 1791881013492340891, 3393267094866038768,
3778721850472236509, 2352769483186201278, 1292459583847367458, 8897907043675088419,
5781809037144163536, 2733958794029492513, 5092019688680754699, 8996124554772526841,
4234737173186232084, 5027558287275472836, 4635198586344772304, 8687338893267139351,
5907508150730407386, 784756255473944452, 972392927514829904, 5422057694808175112,
5158420642969283891, 9048531678558643225, 2407211146698877100, 7583282216521099569,
3940796514530962282, 3341174631045206375, 3095313889586102949, 7405321895688238710,
5832080132947175283, 7890064875145919662, 8184139210799583195, 1149859861409226130,
1464597243840211302, 4641648007187991873, 3516491885471466898, 956288521791657692,
457351505131524928, -8881176990926596454, -6375600354038175299, -7155351920868399290,
4368649989588021065, 887231587095185257, -3659780529968199312, -2407146836602825512,
5616972787034086048, -751562733459939242, 1686575021641186857, -5177887698780513806,
-4979215821652996885, -1375154703071198421, 5632136521049761902, -8390088894796940536,
-193645528485698615, -5979788902190688516, -4907000935050298721, -285522056888777828,
-2776431630044341707, 1679342092332374735, 6050638460742422078, -2229851317345194226,
-1582494184340482199, 5881353426285907985, 812786550756860885, 4541845584483343330,
-6497901820577766722, 4980675660146853729, -4012602956251539747, -329088717864244987,
-2896929232104691526, 1495812843684243920, -2153620458055647789, 7370257291860230865,
-2466442761497833547, 4706794511633873654, -1398851569026877145, 8549875090542453214,
-9189721207376179652, -7894453601103453165, 7297902601803624459, 1011190183918857495,
-6985347000036920864, 5147159997473910359, -8326859945294252826, 2659470849286379941,
6097729358393448602, -7491646050550022124, -5117116194870963097, -896216826133240300,
-745860416168701406, 5803876044675762232, -787954255994554146, -3234519180203704564,
-4507534739750823898, -1657200065590290694, 505808562678895611, -4153273856159712438,
-8381261370078904295, 572156825025677802, 1791881013492340891, 3393267094866038768,
-5444650186382539299, 2352769483186201278, -7930912453007408350, -325464993179687389,
-3441562999710612272, -6489413242825283295, 5092019688680754699, -227247482082248967,
4234737173186232084, 5027558287275472836, 4635198586344772304, -536033143587636457,
5907508150730407386, -8438615781380831356, 972392927514829904, -3801314342046600696,
-4064951393885491917, -174840358296132583, 2407211146698877100, -1640089820333676239,
3940796514530962282, -5882197405809569433, 3095313889586102949, -1818050141166537098,
5832080132947175283, 7890064875145919662, 8184139210799583195, -8073512175445549678,
-7758774793014564506, -4581724029666783935, 3516491885471466898, -8267083515063118116,
6657089965014657519, 5220884358887979358, 1796677326474620641, 5340761970648932916,
1147977171614181568, 5066037465548252321, 2574765911837859848, 1085848279845204775,
3350107529868390359, 6116438694366558490, 2107701075971293812, 1803294065921269267,
2469478054175558874, 7368243281019965984, 3791908367843677526, 185046971116456637,
2257095756513439648, 7217693971077460129, 909049953079504259, 7196649268545224266,
5637660345400869599, 3955544945427965183, 8057528650917418961, 4139268440301127643,
6621926588513568059, 1373361136802681441, 6527366231383600011, 3507654575162700890,
9202058512774729859, 1954818376891585542, 6640380907130175705, 8299563319178235687,
3901867355218954373, 7046310742295574065, 6847195391333990232, 1572638100518868053,
8850422670118399721, 3631909142291992901, 5158881091950831288, 2882958317343121593,
4763258931815816403, 6280052734341785344, 4243789408204964850, 2043464728020827976,
6545300466022085465, 4562580375758598164, 5495451168795427352, 1738312861590151095,
553004618757816492, 6895160632757959823, 8233623922264685171, 7139506338801360852,
8550891222387991669, 5535668688139305547, 2430933853350256242, 5401941257863201076,
8159640039107728799, 6157493831600770366, 7632066283658143750, 6308328381617103346,
-5873264506986385449, 6116438694366558490, 2107701075971293812, -7420077970933506541,
2469478054175558874, -1855128755834809824, -5431463669011098282, -9038325065738319171,
-6966276280341336160, 7217693971077460129, -8314322083775271549, 7196649268545224266,
-3585711691453906209, -5267827091426810625, 8057528650917418961, -5084103596553648165,
-2601445448341207749, -7850010900052094367, 6527366231383600011, 3507654575162700890,
9202058512774729859, 1954818376891585542, -2582991129724600103, 8299563319178235687,
-5321504681635821435, 7046310742295574065, -2376176645520785576, -7650733936335907755,
8850422670118399721, 3631909142291992901, 5158881091950831288, -6340413719511654215,
4763258931815816403, 6280052734341785344, -4979582628649810958, 2043464728020827976,
-2678071570832690343, 4562580375758598164, 5495451168795427352, -7485059175264624713,
553004618757816492, 6895160632757959823, -989748114590090637, 7139506338801360852,
-672480814466784139, 5535668688139305547, 2430933853350256242, -3821430778991574732,
-1063731997747047009, -3065878205254005442, 7632066283658143750, 6308328381617103346,
3681878764086140361, 3289686137190109749, 6587997200611086848, 244714774258135476,
4079788377417136100, 8090302575944624335, 2945117363431356361, 864324395848741045,
3009039260312620700, 8430027460082534031, 401084700045993341, 7254622446438694921,
4707864159563588614, 5640248530963493951, 5982507712689997893, 3315098242282210105,
5503847578771918426, 3941971367175193882, 8118566580304798074, 3839261274019871296,
7062410411742090847, 741381002980207668, 6027994129690250817, 2497829994150063930,
6251390334426228834, 1368930247903518833, 8809096399316380241, 6492004350391900708,
2462145737463489636, 404828418920299174, 4153026434231690595, 261785715255475940,
5464715384600071357, 592710404378763017, 6764129236657751224, 8513655718539357449,
5820343663801914208, 385298524683789911, 5224135003438199467, 6303131641338802145,
7150122561309371392, 368107899140673753, 3115186834558311558, 2915636353584281051,
-5143583659437639708, 8090302575944624335, 2945117363431356361, -8359047641006034763,
3009039260312620700, -793344576772241777, 401084700045993341, -1968749590416080887,
4707864159563588614, -3583123505891281857, -3240864324164777915, -5908273794572565703,
-3719524458082857382, -5281400669679581926, 8118566580304798074, 3839261274019871296,
7062410411742090847, -8481991033874568140, 6027994129690250817, -6725542042704711878,
-2971981702428546974, -7854441788951256975, 8809096399316380241, 6492004350391900708,
2462145737463489636, -8818543617934476634, -5070345602623085213, -8961586321599299868,
-3758656652254704451, -8630661632476012791, 6764129236657751224, -709716318315418359,
-3403028373052861600, -8838073512170985897, -3999237033416576341, -2920240395515973663,
-2073249475545404416, 368107899140673753, -6108185202296464250, -6307735683270494757,
4782583894627718279, 6718292300699989587, 8387085186914375220, 3387513132024756289,
4654329375432538231, 8930667561363381602, 5374373436876319273, 7623042350483453954,
7725442901813263321, 9186225467561587250, 4091027289597503355, 2357631606492579800,
2530936820058611833, 1636551876240043639, 5564664674334965799, 1452244145334316253,
2061642381019690829, 1279580266495294036, 9108481583171221009, 6023278686734049809,
5007630032676973346, 2153168792952589781, 6720334534964750538, 6041546491134794105,
3433922409283786309, 2285479922797300912, 3110614940896576130, 6366559590722842893,
5418791419666136509, 7163298419643543757, 4891138053923696990, 580618510277907015,
1684034065251686769, 4429514767357295841, 330346578555450005, 1119637995812174675,
7177515271653460134, 4589042248470800257, 7693288629059004563, 143607045258444228,
246994305896273627, 866417324803099287, 6473547110565816071, 3092379936208876896,
2058427839513754051, 5133784708526867938, 8785882556301281247, 6149332666841167611,
8585842181454472135, 6137678347805511274, 2070447184436970006, 5708223427705576541,
5999657892458244504, 4358391411789012426, 325123008708389849, 6837621693887290924,
4843721905315627004, 6010651222149276415, 5398352198963874652, 4602025990114250980,
1044646352569048800, 9106614159853161675, 829256115228593269, 4919284369102997000,
2681532557646850893, 3681559472488511871, 5307999518958214035, 6334130388442829274,
2658708232916537604, 1163313865052186287, 581945337509520675, 3648778920718647903,
4423673246306544414, 1620799783996955743, 220828013409515943, 8150384699999389761,
4287360518296753003, 4590000184845883843, 5513660857261085186, 6964829100392774275,
478991688350776035, 8746140185685648781, 228500091334420247, 1356187007457302238,
3019253992034194581, 3152601605678500003, 430152752706002213, 5559581553696971176,
4916432985369275664, 663574931734554391, 3420773838927732076, 2868348622579915573,
1999319134044418520, 3328689518636282723, 2587672709781371173, 1517255313529399333,
3092343956317362483, 3662252519007064108, 972445599196498113, 7664865435875959367,
1708913533482282562, 6917817162668868494, 3217629022545312900, 2570043027221707107,
8739788839543624613, 2488075924621352812, 4694002395387436668, 4559628481798514356,
4654329375432538231, -292704475491394206, -3848998599978456535, 7623042350483453954,
7725442901813263321, 9186225467561587250, -5132344747257272453, -6865740430362196008,
2530936820058611833, 1636551876240043639, -3658707362519810009, 1452244145334316253,
-7161729655835084979, -7943791770359481772, 9108481583171221009, -3200093350120725999,
5007630032676973346, 2153168792952589781, 6720334534964750538, -3181825545719981703,
3433922409283786309, 2285479922797300912, 3110614940896576130, -2856812446131932915,
-3804580617188639299, 7163298419643543757, 4891138053923696990, 580618510277907015,
1684034065251686769, 4429514767357295841, -8893025458299325803, -8103734041042601133,
7177515271653460134, 4589042248470800257, -1530083407795771245, 143607045258444228,
246994305896273627, -8356954712051676521, 6473547110565816071, 3092379936208876896,
2058427839513754051, -4089587328327907870, 8785882556301281247, -3074039370013608197,
-637529855400303673, 6137678347805511274, -7152924852417805802, 5708223427705576541,
-3223714144396531304, 4358391411789012426, 325123008708389849, 6837621693887290924,
4843721905315627004, -3212720814705499393, -3825019837890901156, 4602025990114250980,
1044646352569048800, 9106614159853161675, -8394115921626182539, -4304087667751778808,
2681532557646850893, 3681559472488511871, -3915372517896561773, -2889241648411946534,
-6564663803938238204, -8060058171802589521, 581945337509520675, 3648778920718647903,
-4799698790548231394, -7602572252857820065, 220828013409515943, -1072987336855386047,
4287360518296753003, -4633371852008891965, 5513660857261085186, -2258542936462001533,
-8744380348503999773, 8746140185685648781, 228500091334420247, 1356187007457302238,
3019253992034194581, 3152601605678500003, -8793219284148773595, 5559581553696971176,
4916432985369275664, -8559797105120221417, -5802598197927043732, 2868348622579915573,
-7224052902810357288, -5894682518218493085, 2587672709781371173, -7706116723325376475,
3092343956317362483, -5561119517847711700, 972445599196498113, -1558506600978816441,
1708913533482282562, -2305554874185907314, -6005743014309462908, -6653329009633068701,
-483583197311151195, 2488075924621352812, -4529369641467339140, -4663743555056261452,
2997203966153298104, 1282559373026354493, 240113143146674385, 8665713329246516443,
628141331766346752, 4571950817186770476, 1472811188152235408, 7596648026010355826,
6091219417754424743, 7834161864828164065, 7103445518877254909, 4390861237357459201,
4442653864240571734, 8903482404847331368, 622261699494173647, 6037261250297213248,
504404948065709118, 7275215526217113061, 1011176780856001400, 2194750105623461063,
2623071828615234808, 5157313728073836108, 3738405111966602044, 2539767524076729570,
2467284396349269342, 5256026990536851868, 7841086888628396109, 6640857538655893162,
1202087339038317498, 2113514992440715978, 7534350895342931403, 4925284734898484745,
5145623771477493805, 8225140880134972332, 2719520354384050532, 9132346697815513771,
4332154495710163773, 7137789594094346916, 6994721091344268833, 6667228574869048934,
655440045726677499, 59934747298466858, 6124974028078036405, 8957774780655365418,
2332206071942466437, 1701056712286369627, 3154897383618636503, 1637766181387607527,
2460521277767576533, 197309393502684135, 643677854385267315, 2543179307861934850,
4350769010207485119, 4754652089410667672, 2015595502641514512, 7999059458976458608,
4287946071480840813, 8362686366770308971, 6486469209321732151, 3617727845841796026,
7554353525834302244, 4450022655153542367, 1605195740213535749, 5327014565305508387,
4626575813550328320, 2692222020597705149, 241045573717249868, 5098046974627094010,
7916882295460730264, 884817090297530579, 5329160409530630596, 7790979528857726136,
4955070238059373407, 4918537275422674302, 3008076183950404629, 3007769226071157901,
2470346235617803020, 8928702772696731736, 7856187920214445904, 4474874585391974885,
7900176660600710914, 2140571127916226672, 2425445057265199971, 2486055153341847830,
4186670094382025798, 1883939007446035042, 8808666044074867985, 3734134241178479257,
4065968871360089196, 6953124200385847784, 1305686814738899057, 1637739099014457647,
3656125660947993209, 3966759634633167020, 3106378204088556331, 6328899822778449810,
4565385105440252958, 1979884289539493806, 2331793186920865425, 3783206694208922581,
8464961209802336085, 2843963751609577687, 3030678195484896323, 4793717574095772604,
628141331766346752, -4651421219668005332, -7750560848702540400, 7596648026010355826,
-3132152619100351065, 7834161864828164065, 7103445518877254909, 4390861237357459201,
-4780718172614204074, -319889632007444440, 622261699494173647, -3186110786557562560,
-8718967088789066690, -1948156510637662747, -8212195255998774408, -7028621931231314745,
2623071828615234808, -4066058308780939700, -5484966924888173764, -6683604512778046238,
-6756087640505506466, 5256026990536851868, 7841086888628396109, 6640857538655893162,
-8021284697816458310, -7109857044414059830, -1689021141511844405, -4298087301956291063,
-4077748265377282003, -998231156719803476, 2719520354384050532, 9132346697815513771,
4332154495710163773, -2085582442760428892, 6994721091344268833, -2556143461985726874,
-8567931991128098309, 59934747298466858, -3098398008776739403, -265597256199410390,
2332206071942466437, -7522315324568406181, 3154897383618636503, -7585605855467168281,
-6762850759087199275, 197309393502684135, -8579694182469508493, 2543179307861934850,
4350769010207485119, -4468719947444108136, -7207776534213261296, -1224312577878317200,
4287946071480840813, 8362686366770308971, 6486469209321732151, -5605644191012979782,
-1669018511020473564, 4450022655153542367, -7618176296641240059, -3896357471549267421,
-4596796223304447488, -6531150016257070659, -8982326463137525940, -4125325062227681798,
-1306489741394045544, -8338554946557245229, 5329160409530630596, 7790979528857726136,
4955070238059373407, -4304834761432101506, -6215295852904371179, 3007769226071157901,
-6753025801236972788, 8928702772696731736, 7856187920214445904, -4748497451462800923,
7900176660600710914, -7082800908938549136, -6797926979589575837, -6737316883512927978,
4186670094382025798, 1883939007446035042, -414705992779907823, 3734134241178479257,
4065968871360089196, 6953124200385847784, -7917685222115876751, -7585632937840318161,
-5567246375906782599, -5256612402221608788, 3106378204088556331, -2894472214076325998,
4565385105440252958, 1979884289539493806, -6891578849933910383, 3783206694208922581,
8464961209802336085, 2843963751609577687, 3030678195484896323, -4429654462759003204,
4459239494808162889, 402587895800087237, 8057891408711167515, 4541888170938985079,
1042662272908816815, 5557303057122568958, 2647678726283249984, 2144477441549833761,
5806352215355387087, 7117771003473903623, 5916597177708541638, 462597715452321361,
8833658097025758785, 5970273481425315300, 563813119381731307, 2768349550652697015,
1598828206250873866, 5206393647403558110, 6235043485709261823, 3152217402014639496,
8469693267274066490, 125672920241807416, 5311079624024060938, 6663754932310491587,
8736848295048751716, 4488039774992061878, 5923302823487327109, 140891791083103236,
7414942793393574290, 7990420780896957397, 4317817392807076702, 3625184369705367340,
2740722765288122703, 5743100009702758344, 5997898640509039159, 8854493341352484163,
5242208035432907801, 701338899890987198, 7609280429197514109, 3020985755112334161,
6651322707055512866, 2635195723621160615, 5144520864246028816, 1035086515727829828,
1567242097116389047, 8172389260191636581, 6337820351429292273, 2163012566996458925,
2743190902890262681, 1906367633221323427, 6011544915663598137, 5932255307352610768,
2241128460406315459, 895504896216695588, 3094483003111372717, 4583857460292963101,
9079887171656594975, 8839289181930711403, 5762740387243057873, 4225072055348026230,
1838220598389033063, 3801620336801580414, 8823526620080073856, 1776617605585100335,
7899055018877642622, 5421679761463003041, 5521102963086275121, 4248279443559365898,
8735487530905098534, 1760527091573692978, 7142485049657745894, 8222656872927218123,
4969531564923704323, 3394475942196872480, 6424174453260338141, 359248545074932887,
3273651282831730598, 6797106199797138596, 3030918217665093212, 145600834617314036,
6036575856065626233, 740416251634527158, 7080427635449935582, 6951781370868335478,
399922722363687927, 294902314447253185, 7844950936339178523, 880320858634709042,
6192655680808675579, 411604686384710388, 9026808440365124461, 6440783557497587732,
1042662272908816815, -3666068979732206850, 2647678726283249984, 2144477441549833761,
-3417019821499388721, -2105601033380872185, 5916597177708541638, -8760774321402454447,
8833658097025758785, 5970273481425315300, 563813119381731307, -6455022486202078793,
1598828206250873866, -4016978389451217698, -2988328551145513985, -6071154634840136312,
8469693267274066490, 125672920241807416, -3912292412830714870, -2559617104544284221,
-486523741806024092, -4735332261862713930, 5923302823487327109, -9082480245771672572,
-1808429243461201518, 7990420780896957397, 4317817392807076702, 3625184369705367340,
-6482649271566653105, -3480272027152017464, -3225473396345736649, -368878695502291645,
-3981164001421868007, -8522033136963788610, 7609280429197514109, 3020985755112334161,
-2572049329799262942, 2635195723621160615, 5144520864246028816, -8188285521126945980,
1567242097116389047, 8172389260191636581, -2885551685425483535, -7060359469858316883,
-6480181133964513127, -7317004403633452381, 6011544915663598137, 5932255307352610768,
2241128460406315459, -8327867140638080220, 3094483003111372717, 4583857460292963101,
9079887171656594975, -384082854924064405, -3460631649611717935, 4225072055348026230,
-7385151438465742745, 3801620336801580414, -399845416774701952, -7446754431269675473,
7899055018877642622, 5421679761463003041, 5521102963086275121, -4975092593295409910,
8735487530905098534, -7462844945281082830, -2080886987197029914, -1000715163927557685,
-4253840471931071485, -5828896094657903328, 6424174453260338141, 359248545074932887,
-5949720754023045210, -2426265837057637212, 3030918217665093212, -9077771202237461772,
-3186796180789149575, 740416251634527158, -2142944401404840226, 6951781370868335478,
399922722363687927, -8928469722407522623, -1378421100515597285, -8343051178220066766,
-3030716356046100229, -8811767350470065420, 9026808440365124461, 6440783557497587732,
4615674634722404292, 539897290441580544, 2096238225866883852, 8751955639408182687,
1907224908052289603, 7381039757301768559, 6157238513393239656, 7749994231914157575,
-7316147128802486205, 7381039757301768559, 6157238513393239656, -1473377804940618233,
8629571604380892756, 5280433031239081479, 7101611890139813254, 2479018537985767835,
7169176924412769570, 7942066497793203302, 1357759729055557688, 2278447439451174845,
3625338785743880657, 6477479539006708521, 8976185375579272206, 5511371554711836120,
7169176924412769570, -1281305539061572506, -7865612307799218120, 2278447439451174845,
3625338785743880657, 6477479539006708521, 8976185375579272206, -3712000482142939688,
1326024180520890843, 7537449876596048829, 5464680203499696154, 3189671183162196045,
6346751753565857109, 241159987320630307, 3095793449658682053, 8978332846736310159,
2902794662273147216, 7208698530190629697, 7276901792339343736, 1732385229314443140,
4133292154170828382, 2918308698224194548, 1519461397937144458, 5293934712616591764,
4922828954023452664, 2879211533496425641, 5896236396443472108, 8465043815351752425,
7329020396871624740, 8915471717014488588, 2944902635677463047, 7052079073493465134,
6346751753565857109, -8982212049534145501, -6127578587196093755, -245039190118465649,
-6320577374581628592, 7208698530190629697, 7276901792339343736, -7490986807540332668,
4133292154170828382, 2918308698224194548, -7703910638917631350, -3929437324238184044,
-4300543082831323144, -6344160503358350167, 5896236396443472108, -758328221503023383,
-1894351639983151068, -307900319840287220, -6278469401177312761, -2171292963361310674,
8382142935188824023, 9103922860780351547, 4152330101494654406,
}
)
@ -223,13 +221,18 @@ func (rng *rngSource) Seed(seed int64) {
x = seedrand(x)
u ^= int64(x)
u ^= rng_cooked[i]
rng.vec[i] = u & _MASK
rng.vec[i] = u
}
}
}
// Int63 returns a non-negative pseudo-random 63-bit integer as an int64.
func (rng *rngSource) Int63() int64 {
return int64(rng.Uint64() & _MASK)
}
// Uint64 returns a non-negative pseudo-random 64-bit integer as an uint64.
func (rng *rngSource) Uint64() uint64 {
rng.tap--
if rng.tap < 0 {
rng.tap += _LEN
@ -240,7 +243,7 @@ func (rng *rngSource) Int63() int64 {
rng.feed += _LEN
}
x := (rng.vec[rng.feed] + rng.vec[rng.tap]) & _MASK
x := rng.vec[rng.feed] + rng.vec[rng.tap]
rng.vec[rng.feed] = x
return x
return uint64(x)
}