1
unit LUX.Random.Xoshiro.B64;
3
interface //#################################################################### ■
5
uses LUX, LUX.D2, LUX.D4,
9
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
11
TRandom64ROS128 = class;
12
TRandom64XOS256 = class;
13
TRandom64XOS512 = class;
15
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
17
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TSeedXOS512
22
s :array [ 0..8-1 ] of Int64u;
24
constructor Create( const s0_,s1_,s2_,s3_,s4_,s5_,s6_,s7_:Int64u );
27
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
29
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128
31
TRandom64ROS128 = class( TRandom64SHI<TInt64u2D> )
35
procedure CalcNextSeed; override;
37
constructor CreateFromRand( const Random_:IRandom ); overload; override;
40
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64XOS256
42
TRandom64XOS256 = class( TRandom64SHI<TInt64u4D> )
46
procedure CalcNextSeed; override;
48
constructor CreateFromRand( const Random_:IRandom ); overload; override;
51
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64XOS512
53
TRandom64XOS512 = class( TRandom64SHI<TSeedXOS512> )
57
procedure CalcNextSeed; override;
59
constructor CreateFromRand( const Random_:IRandom ); overload; override;
62
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
64
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
66
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
68
implementation //############################################################### ■
72
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
74
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TSeedXOS512
76
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
78
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
80
constructor TSeedXOS512.Create( const s0_,s1_,s2_,s3_,s4_,s5_,s6_,s7_:Int64u );
92
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
94
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128
96
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
98
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
100
/////////////////////////////////////////////////////////////////////// メソッド
102
procedure TRandom64ROS128.CalcNextSeed;
112
_Seed.X := rotl( X, 24 ) xor Y xor ( Y shl 16 ); // a, b
113
_Seed.Y := rotl( Y, 37 ); // c
117
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
119
constructor TRandom64ROS128.CreateFromRand( const Random_:IRandom );
121
Create( TInt64u2D.Create( Random_.DrawRandInt64u,
122
Random_.DrawRandInt64u ) );
125
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64XOS256
127
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
129
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
131
/////////////////////////////////////////////////////////////////////// メソッド
133
procedure TRandom64XOS256.CalcNextSeed;
152
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
154
constructor TRandom64XOS256.CreateFromRand( const Random_:IRandom );
156
Create( TInt64u4D.Create( Random_.DrawRandInt64u,
157
Random_.DrawRandInt64u,
158
Random_.DrawRandInt64u,
159
Random_.DrawRandInt64u ) );
162
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64XOS512
164
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
166
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
168
/////////////////////////////////////////////////////////////////////// メソッド
170
procedure TRandom64XOS512.CalcNextSeed;
178
s[ 2 ] := s[ 2 ] xor s[ 0 ];
179
s[ 5 ] := s[ 5 ] xor s[ 1 ];
180
s[ 1 ] := s[ 1 ] xor s[ 2 ];
181
s[ 7 ] := s[ 7 ] xor s[ 3 ];
182
s[ 3 ] := s[ 3 ] xor s[ 4 ];
183
s[ 4 ] := s[ 4 ] xor s[ 5 ];
184
s[ 0 ] := s[ 0 ] xor s[ 6 ];
185
s[ 6 ] := s[ 6 ] xor s[ 7 ];
186
s[ 6 ] := s[ 6 ] xor T;
188
s[ 7 ] := rotl( s[ 7 ], 21 );
192
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
194
constructor TRandom64XOS512.CreateFromRand( const Random_:IRandom );
196
Create( TSeedXOS512.Create( Random_.DrawRandInt64u,
197
Random_.DrawRandInt64u,
198
Random_.DrawRandInt64u,
199
Random_.DrawRandInt64u,
200
Random_.DrawRandInt64u,
201
Random_.DrawRandInt64u,
202
Random_.DrawRandInt64u,
203
Random_.DrawRandInt64u ) );
206
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
208
//############################################################################## □
210
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
212
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
214
end. //######################################################################### ■