43 lines
1.4 KiB
Plaintext
43 lines
1.4 KiB
Plaintext
$ include "seed7_05.s7i";
|
|
include "float.s7i";
|
|
|
|
const func float: gamma (in float: X) is func
|
|
result
|
|
var float: result is 0.0;
|
|
local
|
|
const array float: A is [] (
|
|
1.00000000000000000000, 0.57721566490153286061,
|
|
-0.65587807152025388108, -0.04200263503409523553,
|
|
0.16653861138229148950, -0.04219773455554433675,
|
|
-0.00962197152787697356, 0.00721894324666309954,
|
|
-0.00116516759185906511, -0.00021524167411495097,
|
|
0.00012805028238811619, -0.00002013485478078824,
|
|
-0.00000125049348214267, 0.00000113302723198170,
|
|
-0.00000020563384169776, 0.00000000611609510448,
|
|
0.00000000500200764447, -0.00000000118127457049,
|
|
0.00000000010434267117, 0.00000000000778226344,
|
|
-0.00000000000369680562, 0.00000000000051003703,
|
|
-0.00000000000002058326, -0.00000000000000534812,
|
|
0.00000000000000122678, -0.00000000000000011813,
|
|
0.00000000000000000119, 0.00000000000000000141,
|
|
-0.00000000000000000023, 0.00000000000000000002);
|
|
var float: Y is 0.0;
|
|
var float: Sum is A[maxIdx(A)];
|
|
var integer: N is 0;
|
|
begin
|
|
Y := X - 1.0;
|
|
for N range pred(maxIdx(A)) downto minIdx(A) do
|
|
Sum := Sum * Y + A[N];
|
|
end for;
|
|
result := 1.0 / Sum;
|
|
end func;
|
|
|
|
const proc: main is func
|
|
local
|
|
var integer: I is 0;
|
|
begin
|
|
for I range 1 to 10 do
|
|
writeln((gamma(flt(I) / 3.0)) digits 15);
|
|
end for;
|
|
end func;
|