1
// Copyright 2009 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
11
* DP Mitchell and JA Reeds
26
// cooked random numbers
27
// the state of the rng
28
// after 780e10 iterations
29
rng_cooked [_LEN]int64 = [...]int64{
30
5041579894721019882, 4646389086726545243, 1395769623340756751, 5333664234075297259,
31
2875692520355975054, 9033628115061424579, 7143218595135194537, 4812947590706362721,
32
7937252194349799378, 5307299880338848416, 8209348851763925077, 2115741599318814044,
33
4593015457530856296, 8140875735541888011, 3319429241265089026, 8619815648190321034,
34
1727074043483619500, 113108499721038619, 4569519971459345583, 5062833859075314731,
35
2387618771259064424, 2716131344356686112, 6559392774825876886, 7650093201692370310,
36
7684323884043752161, 257867835996031390, 6593456519409015164, 271327514973697897,
37
2789386447340118284, 1065192797246149621, 3344507881999356393, 4459797941780066633,
38
7465081662728599889, 1014950805555097187, 4449440729345990775, 3481109366438502643,
39
2418672789110888383, 5796562887576294778, 4484266064449540171, 3738982361971787048,
40
4523597184512354423, 10530508058128498, 8633833783282346118, 2625309929628791628,
41
8660405965245884302, 10162832508971942, 6540714680961817391, 7031802312784620857,
42
6240911277345944669, 831864355460801054, 8004434137542152891, 2116287251661052151,
43
2202309800992166967, 9161020366945053561, 4069299552407763864, 4936383537992622449,
44
457351505131524928, 342195045928179354, 2847771682816600509, 2068020115986376518,
45
4368649989588021065, 887231587095185257, 5563591506886576496, 6816225200251950296,
46
5616972787034086048, 8471809303394836566, 1686575021641186857, 4045484338074262002,
47
4244156215201778923, 7848217333783577387, 5632136521049761902, 833283142057835272,
48
9029726508369077193, 3243583134664087292, 4316371101804477087, 8937849979965997980,
49
6446940406810434101, 1679342092332374735, 6050638460742422078, 6993520719509581582,
50
7640877852514293609, 5881353426285907985, 812786550756860885, 4541845584483343330,
51
2725470216277009086, 4980675660146853729, 5210769080603236061, 8894283318990530821,
52
6326442804750084282, 1495812843684243920, 7069751578799128019, 7370257291860230865,
53
6756929275356942261, 4706794511633873654, 7824520467827898663, 8549875090542453214,
54
33650829478596156, 1328918435751322643, 7297902601803624459, 1011190183918857495,
55
2238025036817854944, 5147159997473910359, 896512091560522982, 2659470849286379941,
56
6097729358393448602, 1731725986304753684, 4106255841983812711, 8327155210721535508,
57
8477511620686074402, 5803876044675762232, 8435417780860221662, 5988852856651071244,
58
4715837297103951910, 7566171971264485114, 505808562678895611, 5070098180695063370,
59
842110666775871513, 572156825025677802, 1791881013492340891, 3393267094866038768,
60
3778721850472236509, 2352769483186201278, 1292459583847367458, 8897907043675088419,
61
5781809037144163536, 2733958794029492513, 5092019688680754699, 8996124554772526841,
62
4234737173186232084, 5027558287275472836, 4635198586344772304, 8687338893267139351,
63
5907508150730407386, 784756255473944452, 972392927514829904, 5422057694808175112,
64
5158420642969283891, 9048531678558643225, 2407211146698877100, 7583282216521099569,
65
3940796514530962282, 3341174631045206375, 3095313889586102949, 7405321895688238710,
66
5832080132947175283, 7890064875145919662, 8184139210799583195, 1149859861409226130,
67
1464597243840211302, 4641648007187991873, 3516491885471466898, 956288521791657692,
68
6657089965014657519, 5220884358887979358, 1796677326474620641, 5340761970648932916,
69
1147977171614181568, 5066037465548252321, 2574765911837859848, 1085848279845204775,
70
3350107529868390359, 6116438694366558490, 2107701075971293812, 1803294065921269267,
71
2469478054175558874, 7368243281019965984, 3791908367843677526, 185046971116456637,
72
2257095756513439648, 7217693971077460129, 909049953079504259, 7196649268545224266,
73
5637660345400869599, 3955544945427965183, 8057528650917418961, 4139268440301127643,
74
6621926588513568059, 1373361136802681441, 6527366231383600011, 3507654575162700890,
75
9202058512774729859, 1954818376891585542, 6640380907130175705, 8299563319178235687,
76
3901867355218954373, 7046310742295574065, 6847195391333990232, 1572638100518868053,
77
8850422670118399721, 3631909142291992901, 5158881091950831288, 2882958317343121593,
78
4763258931815816403, 6280052734341785344, 4243789408204964850, 2043464728020827976,
79
6545300466022085465, 4562580375758598164, 5495451168795427352, 1738312861590151095,
80
553004618757816492, 6895160632757959823, 8233623922264685171, 7139506338801360852,
81
8550891222387991669, 5535668688139305547, 2430933853350256242, 5401941257863201076,
82
8159640039107728799, 6157493831600770366, 7632066283658143750, 6308328381617103346,
83
3681878764086140361, 3289686137190109749, 6587997200611086848, 244714774258135476,
84
4079788377417136100, 8090302575944624335, 2945117363431356361, 864324395848741045,
85
3009039260312620700, 8430027460082534031, 401084700045993341, 7254622446438694921,
86
4707864159563588614, 5640248530963493951, 5982507712689997893, 3315098242282210105,
87
5503847578771918426, 3941971367175193882, 8118566580304798074, 3839261274019871296,
88
7062410411742090847, 741381002980207668, 6027994129690250817, 2497829994150063930,
89
6251390334426228834, 1368930247903518833, 8809096399316380241, 6492004350391900708,
90
2462145737463489636, 404828418920299174, 4153026434231690595, 261785715255475940,
91
5464715384600071357, 592710404378763017, 6764129236657751224, 8513655718539357449,
92
5820343663801914208, 385298524683789911, 5224135003438199467, 6303131641338802145,
93
7150122561309371392, 368107899140673753, 3115186834558311558, 2915636353584281051,
94
4782583894627718279, 6718292300699989587, 8387085186914375220, 3387513132024756289,
95
4654329375432538231, 8930667561363381602, 5374373436876319273, 7623042350483453954,
96
7725442901813263321, 9186225467561587250, 4091027289597503355, 2357631606492579800,
97
2530936820058611833, 1636551876240043639, 5564664674334965799, 1452244145334316253,
98
2061642381019690829, 1279580266495294036, 9108481583171221009, 6023278686734049809,
99
5007630032676973346, 2153168792952589781, 6720334534964750538, 6041546491134794105,
100
3433922409283786309, 2285479922797300912, 3110614940896576130, 6366559590722842893,
101
5418791419666136509, 7163298419643543757, 4891138053923696990, 580618510277907015,
102
1684034065251686769, 4429514767357295841, 330346578555450005, 1119637995812174675,
103
7177515271653460134, 4589042248470800257, 7693288629059004563, 143607045258444228,
104
246994305896273627, 866417324803099287, 6473547110565816071, 3092379936208876896,
105
2058427839513754051, 5133784708526867938, 8785882556301281247, 6149332666841167611,
106
8585842181454472135, 6137678347805511274, 2070447184436970006, 5708223427705576541,
107
5999657892458244504, 4358391411789012426, 325123008708389849, 6837621693887290924,
108
4843721905315627004, 6010651222149276415, 5398352198963874652, 4602025990114250980,
109
1044646352569048800, 9106614159853161675, 829256115228593269, 4919284369102997000,
110
2681532557646850893, 3681559472488511871, 5307999518958214035, 6334130388442829274,
111
2658708232916537604, 1163313865052186287, 581945337509520675, 3648778920718647903,
112
4423673246306544414, 1620799783996955743, 220828013409515943, 8150384699999389761,
113
4287360518296753003, 4590000184845883843, 5513660857261085186, 6964829100392774275,
114
478991688350776035, 8746140185685648781, 228500091334420247, 1356187007457302238,
115
3019253992034194581, 3152601605678500003, 430152752706002213, 5559581553696971176,
116
4916432985369275664, 663574931734554391, 3420773838927732076, 2868348622579915573,
117
1999319134044418520, 3328689518636282723, 2587672709781371173, 1517255313529399333,
118
3092343956317362483, 3662252519007064108, 972445599196498113, 7664865435875959367,
119
1708913533482282562, 6917817162668868494, 3217629022545312900, 2570043027221707107,
120
8739788839543624613, 2488075924621352812, 4694002395387436668, 4559628481798514356,
121
2997203966153298104, 1282559373026354493, 240113143146674385, 8665713329246516443,
122
628141331766346752, 4571950817186770476, 1472811188152235408, 7596648026010355826,
123
6091219417754424743, 7834161864828164065, 7103445518877254909, 4390861237357459201,
124
4442653864240571734, 8903482404847331368, 622261699494173647, 6037261250297213248,
125
504404948065709118, 7275215526217113061, 1011176780856001400, 2194750105623461063,
126
2623071828615234808, 5157313728073836108, 3738405111966602044, 2539767524076729570,
127
2467284396349269342, 5256026990536851868, 7841086888628396109, 6640857538655893162,
128
1202087339038317498, 2113514992440715978, 7534350895342931403, 4925284734898484745,
129
5145623771477493805, 8225140880134972332, 2719520354384050532, 9132346697815513771,
130
4332154495710163773, 7137789594094346916, 6994721091344268833, 6667228574869048934,
131
655440045726677499, 59934747298466858, 6124974028078036405, 8957774780655365418,
132
2332206071942466437, 1701056712286369627, 3154897383618636503, 1637766181387607527,
133
2460521277767576533, 197309393502684135, 643677854385267315, 2543179307861934850,
134
4350769010207485119, 4754652089410667672, 2015595502641514512, 7999059458976458608,
135
4287946071480840813, 8362686366770308971, 6486469209321732151, 3617727845841796026,
136
7554353525834302244, 4450022655153542367, 1605195740213535749, 5327014565305508387,
137
4626575813550328320, 2692222020597705149, 241045573717249868, 5098046974627094010,
138
7916882295460730264, 884817090297530579, 5329160409530630596, 7790979528857726136,
139
4955070238059373407, 4918537275422674302, 3008076183950404629, 3007769226071157901,
140
2470346235617803020, 8928702772696731736, 7856187920214445904, 4474874585391974885,
141
7900176660600710914, 2140571127916226672, 2425445057265199971, 2486055153341847830,
142
4186670094382025798, 1883939007446035042, 8808666044074867985, 3734134241178479257,
143
4065968871360089196, 6953124200385847784, 1305686814738899057, 1637739099014457647,
144
3656125660947993209, 3966759634633167020, 3106378204088556331, 6328899822778449810,
145
4565385105440252958, 1979884289539493806, 2331793186920865425, 3783206694208922581,
146
8464961209802336085, 2843963751609577687, 3030678195484896323, 4793717574095772604,
147
4459239494808162889, 402587895800087237, 8057891408711167515, 4541888170938985079,
148
1042662272908816815, 5557303057122568958, 2647678726283249984, 2144477441549833761,
149
5806352215355387087, 7117771003473903623, 5916597177708541638, 462597715452321361,
150
8833658097025758785, 5970273481425315300, 563813119381731307, 2768349550652697015,
151
1598828206250873866, 5206393647403558110, 6235043485709261823, 3152217402014639496,
152
8469693267274066490, 125672920241807416, 5311079624024060938, 6663754932310491587,
153
8736848295048751716, 4488039774992061878, 5923302823487327109, 140891791083103236,
154
7414942793393574290, 7990420780896957397, 4317817392807076702, 3625184369705367340,
155
2740722765288122703, 5743100009702758344, 5997898640509039159, 8854493341352484163,
156
5242208035432907801, 701338899890987198, 7609280429197514109, 3020985755112334161,
157
6651322707055512866, 2635195723621160615, 5144520864246028816, 1035086515727829828,
158
1567242097116389047, 8172389260191636581, 6337820351429292273, 2163012566996458925,
159
2743190902890262681, 1906367633221323427, 6011544915663598137, 5932255307352610768,
160
2241128460406315459, 895504896216695588, 3094483003111372717, 4583857460292963101,
161
9079887171656594975, 8839289181930711403, 5762740387243057873, 4225072055348026230,
162
1838220598389033063, 3801620336801580414, 8823526620080073856, 1776617605585100335,
163
7899055018877642622, 5421679761463003041, 5521102963086275121, 4248279443559365898,
164
8735487530905098534, 1760527091573692978, 7142485049657745894, 8222656872927218123,
165
4969531564923704323, 3394475942196872480, 6424174453260338141, 359248545074932887,
166
3273651282831730598, 6797106199797138596, 3030918217665093212, 145600834617314036,
167
6036575856065626233, 740416251634527158, 7080427635449935582, 6951781370868335478,
168
399922722363687927, 294902314447253185, 7844950936339178523, 880320858634709042,
169
6192655680808675579, 411604686384710388, 9026808440365124461, 6440783557497587732,
170
4615674634722404292, 539897290441580544, 2096238225866883852, 8751955639408182687,
171
1907224908052289603, 7381039757301768559, 6157238513393239656, 7749994231914157575,
172
8629571604380892756, 5280433031239081479, 7101611890139813254, 2479018537985767835,
173
7169176924412769570, 7942066497793203302, 1357759729055557688, 2278447439451174845,
174
3625338785743880657, 6477479539006708521, 8976185375579272206, 5511371554711836120,
175
1326024180520890843, 7537449876596048829, 5464680203499696154, 3189671183162196045,
176
6346751753565857109, 241159987320630307, 3095793449658682053, 8978332846736310159,
177
2902794662273147216, 7208698530190629697, 7276901792339343736, 1732385229314443140,
178
4133292154170828382, 2918308698224194548, 1519461397937144458, 5293934712616591764,
179
4922828954023452664, 2879211533496425641, 5896236396443472108, 8465043815351752425,
180
7329020396871624740, 8915471717014488588, 2944902635677463047, 7052079073493465134,
181
8382142935188824023, 9103922860780351547, 4152330101494654406,
185
type rngSource struct {
186
tap int // index into vec
187
feed int // index into vec
188
vec [_LEN]int64 // current feedback register
191
// seed rng x[n+1] = 48271 * x[n] mod (2**31 - 1)
192
func seedrand(x int32) int32 {
202
// Seed uses the provided seed value to initialize the generator to a deterministic state.
203
func (rng *rngSource) Seed(seed int64) {
205
rng.feed = _LEN - _TAP
216
for i := -20; i < _LEN; i++ {
226
rng.vec[i] = u & _MASK
231
// Int63 returns a non-negative pseudo-random 63-bit integer as an int64.
232
func (rng *rngSource) Int63() int64 {
243
x := (rng.vec[rng.feed] + rng.vec[rng.tap]) & _MASK
244
rng.vec[rng.feed] = x