March 2014 update

This commit is contained in:
Ingy döt Net 2014-04-02 16:56:35 +00:00
parent 09687c4926
commit a25938f123
1846 changed files with 21876 additions and 5203 deletions

View file

@ -1,18 +1,51 @@
sub Γ($x) {
1 / <
0.00000_00000_00000_00002 -0.00000_00000_00000_00023 0.00000_00000_00000_00141
0.00000_00000_00000_00119 -0.00000_00000_00000_11813 0.00000_00000_00001_22678
-0.00000_00000_00005_34812 -0.00000_00000_00020_58326 0.00000_00000_00510_03703
-0.00000_00000_03696_80562 0.00000_00000_07782_26344 0.00000_00001_04342_67117
-0.00000_00011_81274_57049 0.00000_00050_02007_64447 0.00000_00061_16095_10448
-0.00000_02056_33841_69776 0.00000_11330_27231_98170 -0.00000_12504_93482_14267
-0.00002_01348_54780_78824 0.00012_80502_82388_11619 -0.00021_52416_74114_95097
-0.00116_51675_91859_06511 0.00721_89432_46663_09954 -0.00962_19715_27876_97356
-0.04219_77345_55544_33675 0.16653_86113_82291_48950 -0.04200_26350_34095_23553
-0.65587_80715_20253_88108 0.57721_56649_01532_86061 1.00000_00000_00000_00000
>.reduce: * *($x-1) + *
sub Γ(\z, :$method = 'lanczos') {
given $method {
when 'lanczos' {
constant g = 9;
z < .5 ?? pi/ sin(pi * z) / Γ(1 - z, :$method) !!
sqrt(2*pi) *
(z + g - 1/2)**(z - 1/2) *
exp(-(z + g - 1/2)) *
[+] <
1.000000000000000174663
5716.400188274341379136
-14815.30426768413909044
14291.49277657478554025
-6348.160217641458813289
1301.608286058321874105
-108.1767053514369634679
2.605696505611755827729
-0.7423452510201416151527e-2
0.5384136432509564062961e-7
-0.4023533141268236372067e-8
> Z* 1, map 1/(z + *), 0..*
}
when 'stirling' {
z < 10 ?? Γ(z + 1, :$method) / z !!
sqrt(2*pi*z)*(z/e + 1/(12*z*e))**z / z
}
when 'taylor' {
z > 3/2 ?? (z - 1)*Γ(z - 1, :$method) !!
z < 1/2 ?? Γ(z + 1, :$method)/z !!
1 / <
0.00000_00000_00000_00002 -0.00000_00000_00000_00023 0.00000_00000_00000_00141
0.00000_00000_00000_00119 -0.00000_00000_00000_11813 0.00000_00000_00001_22678
-0.00000_00000_00005_34812 -0.00000_00000_00020_58326 0.00000_00000_00510_03703
-0.00000_00000_03696_80562 0.00000_00000_07782_26344 0.00000_00001_04342_67117
-0.00000_00011_81274_57049 0.00000_00050_02007_64447 0.00000_00061_16095_10448
-0.00000_02056_33841_69776 0.00000_11330_27231_98170 -0.00000_12504_93482_14267
-0.00002_01348_54780_78824 0.00012_80502_82388_11619 -0.00021_52416_74114_95097
-0.00116_51675_91859_06511 0.00721_89432_46663_09954 -0.00962_19715_27876_97356
-0.04219_77345_55544_33675 0.16653_86113_82291_48950 -0.04200_26350_34095_23553
-0.65587_80715_20253_88108 0.57721_56649_01532_86061 1.00000_00000_00000_00000
>.reduce: * *(z-1) + *
}
default { die "unknow method '$method'" }
}
}
 
for 1/3, 2/3 ... 10/3 {
printf "Γ(%.5f)  %.14f\n", $_, Γ($_);
for <lanczos taylor stirling> -> $method {
# a bug in fmt forces us to round numbers before displaying them
say "{$method.fmt("%10s")}: ",
map { Γ($_, :$method).round(1e-12).fmt("%.12f") }, (1/3, 2/3 ... 10/3);
}