Develop and Download Open Source Software

Browse Subversion Repository

Contents of /math2.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations) (download) (as text)
Mon Nov 7 12:03:00 2011 UTC (12 years, 4 months ago) by shiraishikazuo
File MIME type: text/x-pascal
File size: 9642 byte(s)


1 unit math2;
2 {$IFDEF FPC}
3 {$MODE DELPHI}{$H+}
4 {$ENDIF}
5 (***************************************)
6 (* Copyright (C) 2003, SHIRAISHI Kazuo *)
7 (***************************************)
8
9
10 {$DEFINE extended}
11 {$N+}
12
13
14 interface
15 uses variabl;
16 function NotExistFnc:TPrincipal;far;
17
18 implementation
19
20 uses SysUtils,
21 base,float,arithmet,mathc,
22 struct,express,
23 texthand,confopt,helpctex,graphic,math2sub,sconsts;
24
25
26 procedure FSEC(var x:double);
27 begin
28 x:=1/cos(x)
29 end;
30
31 procedure Fcsc(var x:double);
32 begin
33 x:=1/sin(x)
34 end;
35
36 function SINfnc:TPrincipal;far;
37 begin
38 if confirmedDegrees then
39 SINfnc:=UnaryX(sindeg,1003,'SINdeg')
40 else
41 SINfnc:=Unary({Nsinrad,}FSIN,1003,'SIN')
42 end;
43
44 function COSfnc:TPrincipal;far;
45 begin
46 if confirmedDegrees then
47 COSfnc:=UnaryX(cosdeg,1003,'COSdeg')
48 else
49 COSfnc:=Unary({Ncosrad,}FCOS,1003,'COS')
50 end;
51
52 function TANfnc:TPrincipal;far;
53 begin
54 if confirmedDegrees then
55 TANfnc:=UnaryX(tandeg,1003,'TANdeg')
56 else
57 TANfnc:=Unary({Ntanrad,}FTAN,1003,'TAN')
58 end;
59
60 function CSCfnc:TPrincipal;far;
61 begin
62 if confirmedDegrees then
63 CSCfnc:=UnaryX(CSCdeg,1003,'CSCdeg')
64 else
65 CSCfnc:=Unary({NCSCrad,}FCSC,1003,'CSC')
66 end;
67
68 function SECfnc:TPrincipal;far;
69 begin
70 if confirmedDegrees then
71 SECfnc:=UnaryX(secdeg,1003,'SECdeg')
72 else
73 SECfnc:=Unary({Nsecrad,}FSEC,1003,'SEC')
74 end;
75
76 function COTfnc:TPrincipal;far;
77 begin
78 if confirmedDegrees then
79 COTfnc:=UnaryX(cotdeg,1003,'COTdeg')
80 else
81 COTfnc:=Unary({Ncotrad,}FCOT,1003,'COT')
82 end;
83
84 {*********************}
85 {inverse trigonometric}
86 {*********************}
87
88
89 procedure FASINdeg(var x:double);
90 begin
91 x:=asin(x)*degree
92 end;
93
94 procedure FASIN(var x:double);
95 begin
96 x:=asin(x)
97 end;
98
99 procedure FACOS(var x:double);
100 begin
101 x:=acos(x)
102 end;
103
104 procedure FACOSdeg(var x:double);
105 begin
106 x:=acos(x)*degree
107 end;
108
109 function ATN(x:extended):extended;
110 begin
111 result:=arctan(x)
112 end;
113
114 function ATNdeg(x:extended):extended;
115 begin
116 result:=arctan(x)*degree
117 end;
118
119 function ASINfnc:TPrincipal;far;
120 begin
121 if confirmedDegrees then
122 ASINfnc:=Unary({NASINdeg,}FASINdeg,3007,'ASINdeg')
123 else
124 ASINfnc:=Unary({NASIN,}FASIN,3007,'ASIN')
125 end;
126
127 function ACOSfnc:TPrincipal;far;
128 begin
129 if confirmedDegrees then
130 ACOSfnc:=Unary({NACOSdeg,}FACOSdeg,3007,'ACOSdeg')
131 else
132 ACOSfnc:=Unary({NACOS,}FACOS,3007,'ACOS')
133 end;
134
135
136 function ATNfnc:TPrincipal;far;
137 begin
138 if confirmedDegrees then
139 ATNfnc:=UnaryX(ATNdeg,1003,'ATNdeg')
140 else
141 ATNfnc:=UnaryX(ATN,1003,'ATN')
142 end;
143
144 function ANGLEfnc:TPrincipal;far;
145 begin
146 if confirmedDegrees then
147 ANGLEfnc:=BinaryX(Angledeg,3008,'ANGLEdeg')
148 else
149 ANGLEfnc:=BinaryX(angle,3008,'ANGLE')
150 end;
151
152 {********************}
153 {hyperbolic functions}
154 {********************}
155
156 function SINHfnc:TPrincipal;far;
157 begin
158 SINHfnc:=UnaryX(sinh,1003,'SINH')
159 end;
160
161 function COSHfnc:TPrincipal;far;
162 begin
163 COSHfnc:=UnaryX(cosh,1003,'COSH')
164 end;
165
166 function TANHfnc:TPrincipal;far;
167 begin
168 TANHfnc:=UnaryX(tanh,1003,'TANH')
169 end;
170
171 {******}
172 {Others}
173 {******}
174
175 function DEGfnc:TPrincipal;far;
176 begin
177 DEGfnc:=UnaryX(deg,1003,'DEG')
178 end;
179
180 function MyEXP(x:extended):extended;
181 begin
182 result:=system.exp(x)
183 end;
184
185 function EXPfnc:TPrincipal;far;
186 begin
187 EXPfnc:=UnaryX(MyExp,1003,'EXP')
188 end;
189
190
191
192 procedure FLOG(var x:double);
193 begin
194 x:=ln(x)
195 end;
196
197 function LOGfnc:TPrincipal;far;
198 begin
199 LOGfnc:=Unary({NLOG,}FLOG,3004,'LOG')
200 end;
201
202 procedure FLOG2(var x:double);
203 begin
204 x:=ln(x)/ln2
205 end;
206
207 function LOG2fnc:TPrincipal;far;
208 begin
209 LOG2fnc:=Unary({NlOG2,}FLOG2,3004,'LOG2')
210 end;
211
212 procedure FLOG10(var x:double);
213 begin
214 x:=ln(x)/ln10
215 end;
216
217 function LOG10fnc:TPrincipal;far;
218 begin
219 LOG10fnc:=Unary({NLOG10,}FLOG10,3004,'LOG10')
220 end;
221
222 function RADfnc:TPrincipal;far;
223 begin
224 RADfnc:=UnaryX(Rad,1003,'RAD')
225 end;
226
227
228 {********}
229 {Graphics}
230 {********}
231 type
232 TmiscX=class(TPrincipal)
233 // evalX������������������������������������������������operation
234 //procedure evalN(var n:number);override;
235 function evalF:double;override;
236 //procedure evalC(var x:complex);override;
237 //procedure evalR(var r:PNumeric);override;
238 end;
239
240 function TmiscX.evalF:double;
241 begin
242 result:=evalX
243 end;
244
245
246 type
247 TMiscUnaryX=class(TMiscX)
248 exp:TPrincipal;
249 f:extendedfunction1;
250 constructor create(f1:extendedfunction1);
251 destructor destroy;override;
252 function evalX:extended;override;
253 function Code:ansistring;override;
254 function QueryInteger:TSubstanceList;override; // Integer������������������������������nil������������������
255 end;
256
257
258 constructor TMiscUnaryX.create;
259 begin
260 inherited create;
261 f:=f1;
262 check('(',IDH_ARRAY_FUNCTION);
263 exp:=NExpression;
264 check(')',IDH_ARRAY_FUNCTION);
265 end;
266
267 destructor TMiscUnaryX.destroy;
268 begin
269 exp.free;
270 inherited destroy;
271 end;
272
273 function TMiscUnaryX.evalX:extended;
274 begin
275 result:=f(exp.evalX);
276 end;
277
278
279
280 function TMiscUnaryX.Code:ansistring;
281 begin
282 if @f=@PixelX then
283 result:='PixelX('
284 else if @f=@PixelY then
285 result:='PixelY('
286 else if @f=@WindowX then
287 result:='WindowX('
288 else if @f=@WindowY then
289 result:='WindowY(';
290 result:=result+exp.code+')'
291 end;
292
293 function TMiscUnaryX.QueryInteger:TSubstanceList; // Integer������������������������������nil������������������
294 begin
295 if (@f=@PixelX) or (@f=@PixelY) then
296 result:=TSubstanceList.create
297 else
298 result:=nil;
299 end;
300
301
302
303 function PixelXfnc:TPrincipal;far;
304 begin
305 PixelXfnc:=NOperation(TMIscUnaryX.create(PixelX))
306 end;
307
308 function PixelYfnc:TPrincipal;far;
309 begin
310 PixelYfnc:=NOperation(TMIscUnaryX.create(PixelY))
311 end;
312
313 function ProblemXfnc:TPrincipal;far;
314 begin
315 ProblemXfnc:=NOperation(TMIscUnaryX.create(WindowX))
316 end;
317
318 function ProblemYfnc:TPrincipal;far;
319 begin
320 ProblemYfnc:=NOperation(TMIscUnaryX.create(WindowY))
321 end;
322
323
324 {*************}
325 {Registeration}
326 {*************}
327
328 function NotExistFnc:TPrincipal;far;
329 begin
330 NotExistFnc:=nil;
331 seterr(Format(s_InvalidFunctionOnMode,
332 [prevtoken,PrecisionText[PrecisionMode]]),RUN_OPTION)
333 end;
334
335
336
337 procedure FunctionTableInit;far;
338 begin
339 if (PrecisionMode in [PrecisionNormal,PrecisionNative,PrecisionComplex] )
340 or (PrecisionMode in [PrecisionHigh,PrecisionRational])
341 and UseTranscendentalFunction then
342 begin
343 if PrecisionMode<>PrecisionComplex then
344 begin
345 SuppliedFunctionTableInit('EXP' ,EXPfnc );
346 SuppliedFunctionTableInit('LOG' ,LOGfnc);
347 end;
348 SuppliedFunctionTableInit('ACOS', ACOSfnc);
349 SuppliedFunctionTableInit('ANGLE',ANGLEfnc );
350 SuppliedFunctionTableInit('ASIN', ASINfnc );
351 SuppliedFunctionTableInit('ATN' , ATNfnc );
352 SuppliedFunctionTableInit('COS' , COSfnc);
353 SuppliedFunctionTableInit('COSH', COSHfnc );
354 SuppliedFunctionTableInit('COT', COTfnc);
355 SuppliedFunctionTableInit('CSC' , CSCfnc);
356 SuppliedFunctionTableInit('DEG' , DEGfnc );
357 SuppliedFunctionTableInit('LOG10',LOG10fnc );
358 SuppliedFunctionTableInit('LOG2' ,LOG2fnc);
359 SuppliedFunctionTableInit('RAD' , RADfnc);
360 SuppliedFunctionTableInit('SEC', SECfnc);
361 SuppliedFunctionTableInit('SIN', SINfnc);
362 SuppliedFunctionTableInit('SINH', SINHfnc);
363 SuppliedFunctionTableInit('TAN' , TANfnc);
364 SuppliedFunctionTableInit('TANH' ,TANHfnc);
365 end
366 else if (PrecisionMode in [PrecisionHigh,PrecisionRational])
367 and not UseTranscendentalFunction then
368 begin
369 SuppliedFunctionTableInit('ACOS' ,NotExistFnc);
370 SuppliedFunctionTableInit('ANGLE',NotExistFnc);
371 SuppliedFunctionTableInit('ASIN' ,NotExistFnc);
372 SuppliedFunctionTableInit('ATN' ,NotExistFnc);
373 SuppliedFunctionTableInit('COS' ,NotExistFnc);
374 SuppliedFunctionTableInit('COSH' ,NotExistFnc);
375 SuppliedFunctionTableInit('COT' ,NotExistFnc);
376 SuppliedFunctionTableInit('CSC' ,NotExistFnc);
377 SuppliedFunctionTableInit('DEG' ,NotExistFnc);
378 SuppliedFunctionTableInit('EXP' ,NotExistFnc);
379 SuppliedFunctionTableInit('LOG' ,NotExistFnc);
380 SuppliedFunctionTableInit('LOG10',NotExistFnc);
381 SuppliedFunctionTableInit('LOG2' ,NotExistFnc);
382 SuppliedFunctionTableInit('RAD' ,NotExistFnc);
383 SuppliedFunctionTableInit('SEC' ,NotExistFnc);
384 SuppliedFunctionTableInit('SIN' ,NotExistFnc);
385 SuppliedFunctionTableInit('SINH' ,NotExistFnc);
386 SuppliedFunctionTableInit('TAN' ,NotExistFnc);
387 SuppliedFunctionTableInit('TANH' ,NotExistFnc);
388 end;
389
390 SuppliedFunctionTableInit('PIXELX',PixelXfnc);
391 SuppliedFunctionTableInit('PIXELY',PixelYfnc);
392 SuppliedFunctionTableInit('WORLDX',ProblemXfnc);
393 SuppliedFunctionTableInit('WORLDY',ProblemYfnc);
394 SuppliedFunctionTableInit('PROBLEMX',ProblemXfnc);
395 SuppliedFunctionTableInit('PROBLEMY',ProblemYfnc);
396 SuppliedFunctionTableInit('WINDOWX',ProblemXfnc);
397 SuppliedFunctionTableInit('WINDOWY',ProblemYfnc);
398 end;
399
400
401 procedure statementTableinit;far;
402 begin
403 end;
404
405 begin
406 tableInitProcs.accept(statementTableinit);
407 tableInitProcs.accept(FunctionTableInit);
408 end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26