Luxophia

Форк
0
/
LUX.Random.Xoshiro.B64.P128.pas 
230 строк · 7.3 Кб
1
unit LUX.Random.Xoshiro.B64.P128;
2

3
interface //#################################################################### ■
4

5
uses LUX, LUX.D2, LUX.D4,
6
     LUX.Random,
7
     LUX.Random.Xoshiro,
8
     LUX.Random.Xoshiro.B64;
9

10
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
11

12
     TRandom64ROS128p       = class;
13
     TRandom64ROS128s       = class;
14
     TRandom64ROS128ss      = class;
15
     TRandom64ROS128x64     = class;
16
       TRandom64ROS128x64p  = class;
17
       TRandom64ROS128x64ss = class;
18

19
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
20

21
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
22

23
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128p
24

25
     TRandom64ROS128p = class( TRandom64ROS128 )
26
     private
27
     protected
28
       ///// メソッド
29
       function CalcRandInt64u :Int64u; override;
30
     public
31
     end;
32

33
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128s
34

35
     TRandom64ROS128s = class( TRandom64ROS128 )
36
     private
37
     protected
38
       ///// メソッド
39
       function CalcRandInt64u :Int64u; override;
40
     public
41
     end;
42

43
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128ss
44

45
     TRandom64ROS128ss = class( TRandom64ROS128 )
46
     private
47
     protected
48
       ///// メソッド
49
       function CalcRandInt64u :Int64u; override;
50
     public
51
     end;
52

53
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128x64
54

55
     TRandom64ROS128x64 = class( TRandom64ROS128 )
56
     private
57
     protected
58
       ///// メソッド
59
       procedure CalcNextSeed; override;
60
     public
61
     end;
62

63
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128x64p
64

65
     TRandom64ROS128x64p = class( TRandom64ROS128x64 )
66
     private
67
     protected
68
       ///// メソッド
69
       function CalcRandInt64u :Int64u; override;
70
     public
71
     end;
72

73
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128x64ss
74

75
     TRandom64ROS128x64ss = class( TRandom64ROS128x64 )
76
     private
77
     protected
78
       ///// メソッド
79
       function CalcRandInt64u :Int64u; override;
80
     public
81
     end;
82

83
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
84

85
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
86

87
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
88

89
implementation //############################################################### ■
90

91
uses System.SysUtils;
92

93
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
94

95
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
96

97
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128p
98

99
{ http://xoshiro.di.unimi.it/xoroshiro128plus.c }
100

101
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
102

103
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
104

105
/////////////////////////////////////////////////////////////////////// メソッド
106

107
function TRandom64ROS128p.CalcRandInt64u :Int64u;
108
begin
109
	   with _Seed do Result := X + Y;
110
end;
111

112
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
113

114
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128s
115

116
{ http://xoshiro.di.unimi.it/xoroshiro128starstar.c }
117

118
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
119

120
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
121

122
/////////////////////////////////////////////////////////////////////// メソッド
123

124
function TRandom64ROS128s.CalcRandInt64u :Int64u;
125
begin
126
	   Result := _Seed.X * $9e3779b97f4a7c13;
127
end;
128

129
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
130

131
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128ss
132

133
{ http://xoshiro.di.unimi.it/xoroshiro128starstar.c }
134

135
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
136

137
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
138

139
/////////////////////////////////////////////////////////////////////// メソッド
140

141
function TRandom64ROS128ss.CalcRandInt64u :Int64u;
142
begin
143
	   Result := rotl( _Seed.X * 5, 7 ) * 9;
144
end;
145

146
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
147

148
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128x64
149

150
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
151

152
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
153

154
/////////////////////////////////////////////////////////////////////// メソッド
155

156
procedure TRandom64ROS128x64.CalcNextSeed;
157
const
158
     JUMP :array [ 0..2-1 ] of Int64u = ( $df900294d8f554a5,
159
                                          $170865df4b3201fc );
160
var
161
   S :TInt64u2D;
162
   I, B :Int64s;
163
begin
164
     S := TInt64u2D.Create( 0, 0 );
165

166
     for I := 0 to 2-1 do
167
     begin
168
          for B := 0 to 64 - 1 do
169
          begin
170
               if JUMP[ I ] and ( 1 shl B ) = 1 then
171
               begin
172
                    with S do
173
                    begin
174
                         X := X xor _Seed.X;
175
                         Y := Y xor _Seed.Y;
176
                    end;
177
               end;
178

179
               inherited CalcNextSeed;
180
          end;
181
     end;
182

183
     _Seed := S;
184
end;
185

186
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
187

188
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128x64p
189

190
{ http://xoshiro.di.unimi.it/xoroshiro128plus.c }
191

192
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
193

194
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
195

196
/////////////////////////////////////////////////////////////////////// メソッド
197

198
function TRandom64ROS128x64p.CalcRandInt64u :Int64u;
199
begin
200
	   with _Seed do Result := X + Y;
201
end;
202

203
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
204

205
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128x64ss
206

207
{ http://xoshiro.di.unimi.it/xoroshiro128starstar.c }
208

209
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
210

211
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
212

213
/////////////////////////////////////////////////////////////////////// メソッド
214

215
function TRandom64ROS128x64ss.CalcRandInt64u :Int64u;
216
begin
217
	   Result := rotl( _Seed.X * 5, 7 ) * 9;
218
end;
219

220
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
221

222
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
223

224
//############################################################################## □
225

226
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
227

228
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
229

230
end. //######################################################################### ■
231

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.