Luxophia

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

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

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

9
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
10

11
     TRandom64ROS128 = class;
12
     TRandom64XOS256 = class;
13
     TRandom64XOS512 = class;
14

15
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
16

17
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TSeedXOS512
18

19
     TSeedXOS512 = record
20
     private
21
     public
22
       s :array [ 0..8-1 ] of Int64u;
23
       /////
24
       constructor Create( const s0_,s1_,s2_,s3_,s4_,s5_,s6_,s7_:Int64u );
25
     end;
26

27
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
28

29
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128
30

31
     TRandom64ROS128 = class( TRandom64SHI<TInt64u2D> )
32
     private
33
     protected
34
       ///// メソッド
35
       procedure CalcNextSeed; override;
36
     public
37
       constructor CreateFromRand( const Random_:IRandom ); overload; override;
38
     end;
39

40
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64XOS256
41

42
     TRandom64XOS256 = class( TRandom64SHI<TInt64u4D> )
43
     private
44
     protected
45
       ///// メソッド
46
       procedure CalcNextSeed; override;
47
     public
48
       constructor CreateFromRand( const Random_:IRandom ); overload; override;
49
     end;
50

51
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64XOS512
52

53
     TRandom64XOS512 = class( TRandom64SHI<TSeedXOS512> )
54
     private
55
     protected
56
       ///// メソッド
57
       procedure CalcNextSeed; override;
58
     public
59
       constructor CreateFromRand( const Random_:IRandom ); overload; override;
60
     end;
61

62
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
63

64
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
65

66
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
67

68
implementation //############################################################### ■
69

70
uses System.SysUtils;
71

72
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
73

74
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TSeedXOS512
75

76
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
77

78
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
79

80
constructor TSeedXOS512.Create( const s0_,s1_,s2_,s3_,s4_,s5_,s6_,s7_:Int64u );
81
begin
82
     s[ 0 ] := s0_;
83
     s[ 1 ] := s1_;
84
     s[ 2 ] := s2_;
85
     s[ 3 ] := s3_;
86
     s[ 4 ] := s4_;
87
     s[ 5 ] := s5_;
88
     s[ 6 ] := s6_;
89
     s[ 7 ] := s7_;
90
end;
91

92
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
93

94
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64ROS128
95

96
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
97

98
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
99

100
/////////////////////////////////////////////////////////////////////// メソッド
101

102
procedure TRandom64ROS128.CalcNextSeed;
103
var
104
   S :TInt64u2D;
105
begin
106
     S := _Seed;
107

108
     with S do
109
     begin
110
          Y := Y xor X;
111

112
          _Seed.X := rotl( X, 24 ) xor Y xor ( Y shl 16 );  // a, b
113
          _Seed.Y := rotl( Y, 37 );                         // c
114
     end;
115
end;
116

117
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
118

119
constructor TRandom64ROS128.CreateFromRand( const Random_:IRandom );
120
begin
121
     Create( TInt64u2D.Create( Random_.DrawRandInt64u,
122
                               Random_.DrawRandInt64u ) );
123
end;
124

125
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64XOS256
126

127
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
128

129
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
130

131
/////////////////////////////////////////////////////////////////////// メソッド
132

133
procedure TRandom64XOS256.CalcNextSeed;
134
var
135
   T :Int64u;
136
begin
137
     with _Seed do
138
     begin
139
          T := Y shl 17;
140

141
          Z := Z xor X;
142
          W := W xor Y;
143
          Y := Y xor Z;
144
          X := X xor W;
145

146
          Z := Z xor T;
147

148
          W := rotl( W, 45 );
149
     end;
150
end;
151

152
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
153

154
constructor TRandom64XOS256.CreateFromRand( const Random_:IRandom );
155
begin
156
     Create( TInt64u4D.Create( Random_.DrawRandInt64u,
157
                               Random_.DrawRandInt64u,
158
                               Random_.DrawRandInt64u,
159
                               Random_.DrawRandInt64u ) );
160
end;
161

162
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRandom64XOS512
163

164
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
165

166
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
167

168
/////////////////////////////////////////////////////////////////////// メソッド
169

170
procedure TRandom64XOS512.CalcNextSeed;
171
var
172
   T :Int64u;
173
begin
174
     with _Seed do
175
     begin
176
          T := s[ 1 ] shl 11;
177

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;
187

188
          s[ 7 ] := rotl( s[ 7 ], 21 );
189
     end;
190
end;
191

192
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
193

194
constructor TRandom64XOS512.CreateFromRand( const Random_:IRandom );
195
begin
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 ) );
204
end;
205

206
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
207

208
//############################################################################## □
209

210
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
211

212
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
213

214
end. //######################################################################### ■
215

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

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

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

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