Luxophia

Форк
0
/
LUX.Math.Special.pas 
236 строк · 5.7 Кб
1
unit LUX.Math.Special;
2

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

5
uses LUX, LUX.D1;
6

7
//type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
8

9
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
10

11
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% {RECORD}
12

13
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
14

15
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% {CLASS}
16

17
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
18

19
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
20

21
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
22

23
function HypGeo21( const A_,B_,C_,X_:Single ) :Single; overload;
24
function HypGeo21( const A_,B_,C_,X_:Double ) :Double; overload;
25
function HypGeo21( const A_,B_,C_,X_:TdSingle ) :TdSingle; overload;
26
function HypGeo21( const A_,B_,C_,X_:TdDouble ) :TdDouble; overload;
27

28
///// HypGeo21A( B_, C_, X_ ) = HypGeo21( 1, B_, C_, X_ )
29
function HypGeo21A( const B_,C_,X_:Single ) :Single; overload;
30
function HypGeo21A( const B_,C_,X_:Double ) :Double; overload;
31
function HypGeo21A( const B_,C_,X_:TdSingle ) :TdSingle; overload;
32
function HypGeo21A( const B_,C_,X_:TdDouble ) :TdDouble; overload;
33

34
implementation //############################################################### ■
35

36
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
37

38
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% {RECORD}
39

40
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
41

42
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
43

44
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
45

46
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% {CLASS}
47

48
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
49

50
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
51

52
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
53

54
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
55

56
function HypGeo21( const A_,B_,C_,X_:Single ) :Single;
57
var
58
   P0, P1 :Single;
59
   N :Integer;
60
begin
61
     P0 := 1;
62

63
     Result := P0;
64

65
     for N := 0 to 10000 do
66
     begin
67
          P1 := ( ( A_ + N ) * ( B_ + N ) )
68
              / ( ( C_ + N ) * ( 1  + N ) ) * X_ * P0;
69

70
          Result := Result + P1;
71

72
          if Abs( P1 ) < SINGLE_EPS3 then Break;
73

74
          P0 := P1;
75
     end;
76
end;
77

78
function HypGeo21( const A_,B_,C_,X_:Double ) :Double;
79
var
80
   P0, P1 :Double;
81
   N :Integer;
82
begin
83
     P0 := 1;
84

85
     Result := P0;
86

87
     for N := 0 to 10000 do
88
     begin
89
          P1 := ( ( A_ + N ) * ( B_ + N ) )
90
              / ( ( C_ + N ) * ( 1  + N ) ) * X_ * P0;
91

92
          Result := Result + P1;
93

94
          if Abs( P1 ) < DOUBLE_EPS3 then Break;
95

96
          P0 := P1;
97
     end;
98
end;
99

100
function HypGeo21( const A_,B_,C_,X_:TdSingle ) :TdSingle;
101
var
102
   P0, P1 :TdSingle;
103
   N :Integer;
104
begin
105
     P0 := 1;
106

107
     Result := P0;
108

109
     for N := 0 to 10000 do
110
     begin
111
          P1 := ( ( A_ + N ) * ( B_ + N ) )
112
              / ( ( C_ + N ) * ( 1  + N ) ) * X_ * P0;
113

114
          Result := Result + P1;
115

116
          if Abs( P1.o ) < SINGLE_EPS3 then Break;
117

118
          P0 := P1;
119
     end;
120
end;
121

122
function HypGeo21( const A_,B_,C_,X_:TdDouble ) :TdDouble;
123
var
124
   P0, P1 :TdDouble;
125
   N :Integer;
126
begin
127
     P0 := 1;
128

129
     Result := P0;
130

131
     for N := 0 to 10000 do
132
     begin
133
          P1 := ( ( A_ + N ) * ( B_ + N ) )
134
              / ( ( C_ + N ) * ( 1  + N ) ) * X_ * P0;
135

136
          Result := Result + P1;
137

138
          if Abs( P1.o ) < DOUBLE_EPS3 then Break;
139

140
          P0 := P1;
141
     end;
142
end;
143

144
//------------------------------------------------------------------------------
145

146
function HypGeo21A( const B_,C_,X_:Single ) :Single;
147
var
148
   P0, P1 :Single;
149
   N :Integer;
150
begin
151
     P0 := 1;
152

153
     Result := P0;
154

155
     for N := 0 to 10000 do
156
     begin
157
          P1 := ( B_ + N ) / ( C_ + N ) * X_ * P0;
158

159
          Result := Result + P1;
160

161
          if Abs( P1 ) < DOUBLE_EPS3 then Break;
162

163
          P0 := P1;
164
     end;
165
end;
166

167
function HypGeo21A( const B_,C_,X_:Double ) :Double;
168
var
169
   P0, P1 :Double;
170
   N :Integer;
171
begin
172
     P0 := 1;
173

174
     Result := P0;
175

176
     for N := 0 to 10000 do
177
     begin
178
          P1 := ( B_ + N ) / ( C_ + N ) * X_ * P0;
179

180
          Result := Result + P1;
181

182
          if Abs( P1 ) < DOUBLE_EPS3 then Break;
183

184
          P0 := P1;
185
     end;
186
end;
187

188
function HypGeo21A( const B_,C_,X_:TdSingle ) :TdSingle;
189
var
190
   P0, P1 :TdSingle;
191
   N :Integer;
192
begin
193
     P0 := 1;
194

195
     Result := P0;
196

197
     for N := 0 to 10000 do
198
     begin
199
          P1 := ( B_ + N ) / ( C_ + N ) * X_ * P0;
200

201
          Result := Result + P1;
202

203
          if Abs( P1.o ) < DOUBLE_EPS3 then Break;
204

205
          P0 := P1;
206
     end;
207
end;
208

209
function HypGeo21A( const B_,C_,X_:TdDouble ) :TdDouble;
210
var
211
   P0, P1 :TdDouble;
212
   N :Integer;
213
begin
214
     P0 := 1;
215

216
     Result := P0;
217

218
     for N := 0 to 10000 do
219
     begin
220
          P1 := ( B_ + N ) / ( C_ + N ) * X_ * P0;
221

222
          Result := Result + P1;
223

224
          if Abs( P1.o ) < DOUBLE_EPS3 then Break;
225

226
          P0 := P1;
227
     end;
228
end;
229

230
//############################################################################## □
231

232
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
233

234
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
235

236
end. //######################################################################### ■

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

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

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

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