gamma.js (825B)
1 /* 2 * A gamma function implementation based on Lanczos Approximation 3 * https://en.wikipedia.org/wiki/Lanczos_approximation 4 */ 5 6 var Complex = require('../complex'); 7 8 var P = [Complex(0.99999999999980993), 9 Complex(676.5203681218851), Complex(-1259.1392167224028), Complex(771.32342877765313), 10 Complex(-176.61502916214059), Complex(12.507343278686905), Complex(-0.13857109526572012), 11 Complex(9.9843695780195716e-6), Complex(1.5056327351493116e-7)]; 12 13 var SQRT2PI = Complex(Math.sqrt(2 * Math.PI)); 14 15 function gamma(z) { 16 17 z = z.sub(1); 18 19 var x = P[0]; 20 var t = z.add(7.5); 21 for (var i = 1; i < P.length; i++) { 22 x = x.add(P[i].div(z.add(i))); 23 } 24 return SQRT2PI.mul(t.pow(z.add(0.5))).mul(t.neg().exp()).mul(x); 25 } 26 27 var fac = 1; 28 for (var i = 1; i <= 10; i++) { 29 console.log(fac, gamma(Complex(i))); 30 fac *= i; 31 }