Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
55
Task/Gamma-function/Modula-2/gamma-function.mod2
Normal file
55
Task/Gamma-function/Modula-2/gamma-function.mod2
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
MODULE GammaFun;
|
||||
(* Gamma function *)
|
||||
(* Lanczos approximation *)
|
||||
FROM LongMath IMPORT
|
||||
exp, ln, pi, sin, sqrt;
|
||||
FROM SLongIO IMPORT
|
||||
WriteFixed;
|
||||
FROM STextIO IMPORT
|
||||
WriteLn, WriteString;
|
||||
|
||||
VAR
|
||||
X: LONGREAL;
|
||||
|
||||
PROCEDURE Gamma(Z: LONGREAL): LONGREAL;
|
||||
TYPE
|
||||
LZArr = ARRAY [0 .. 6] OF LONGREAL;
|
||||
VAR
|
||||
LZ: LZArr;
|
||||
|
||||
PROCEDURE LnGamma(Z: LONGREAL): LONGREAL;
|
||||
(* Uses LZ *)
|
||||
VAR
|
||||
B, A: LONGREAL;
|
||||
I: CARDINAL;
|
||||
BEGIN
|
||||
IF Z < 0.5 THEN
|
||||
RETURN ln(pi / sin(pi * Z)) - LnGamma(1.0 - Z)
|
||||
ELSE
|
||||
Z:= Z - 1.0;
|
||||
B:= Z + 5.5;
|
||||
A:= LZ[0];
|
||||
FOR I:= 1 TO 6 DO
|
||||
A:= A + LZ[I] / (Z + LFLOAT(I))
|
||||
END;
|
||||
RETURN (ln(sqrt(2. * pi)) + ln(A) - B) + ln(B) * (Z + 0.5)
|
||||
END;
|
||||
END LnGamma;
|
||||
|
||||
BEGIN
|
||||
LZ:= LZArr{1.00000000019001, 76.1800917294715, -86.5053203294168,
|
||||
24.0140982408309, -1.23173957245015, 1.2086509738662E-3,
|
||||
-0.000005395239385};
|
||||
RETURN exp(LnGamma(Z))
|
||||
END Gamma;
|
||||
|
||||
BEGIN
|
||||
X:= 0.1;
|
||||
WHILE X < 2.05 DO
|
||||
WriteFixed(X, 1, 4);
|
||||
WriteString(" ");
|
||||
WriteFixed(Gamma(X), 12, 15);
|
||||
WriteLn;
|
||||
X:= X + 0.1
|
||||
END;
|
||||
END GammaFun.
|
||||
Loading…
Add table
Add a link
Reference in a new issue