JavaScript: Calculate Lanczos approximation gamma

JavaScript Math: Exercise-49 with Solution

Write a JavaScript function to calculate Lanczos approximation gamma.

In mathematics, the Lanczos approximation is a method for computing the Gamma function numerically, published by Cornelius Lanczos in 1964. It is a practical alternative to the more popular Stirling's approximation for calculating the Gamma function with fixed precision.

Sample Solution:-

HTML Code:

<!DOCTYPE html>
  <meta charset="utf-8">
  <title>JavaScript function to calculate Lanczos approximation gamma</title>


JavaScript Code:

function Lanczos_Gamma(num) 
  var p = [
    0.99999999999980993, 676.5203681218851, -1259.1392167224028,
    771.32342877765313, -176.61502916214059, 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7
  var i;
  var g = 7;
  if (num < 0.5) return Math.PI / (Math.sin(Math.PI * num) * calculus.LanczosGamma(1 - num));
  num -= 1;
  var a = p[0];
  var t = num + g + 0.5;
  for (i = 1; i < p.length; i++) {
    a += p[i] / (num + i);
  return Math.sqrt(2 * Math.PI) * Math.pow(t, num + 0.5) * Math.exp(-t) * a;

Sample Output:



Flowchart: JavaScript Math - Calculate Lanczos approximation gamma

Live Demo:

See the Pen javascript-math-exercise-49 by w3resource (@w3resource) on CodePen.

Improve this sample solution and post your code through Disqus

Previous: Write a JavaScript function to calculate the falling factorial of a number.
Next: Write a JavaScript program to add two complex numbers.

What is the difficulty level of this exercise?

JavaScript: Tips of the Day

What is the !! (not not) operator in JavaScript?

Converts Object to boolean. If it was falsey (e.g. 0, null, undefined, etc.), it will be false, otherwise, true.

!oObject  // inverted boolean
!!oObject // non inverted boolean so true boolean representation

So !! is not an operator, it's just the ! operator twice.

Real World Example "Test IE version":

const isIE8 = !! navigator.userAgent.match(/MSIE 8.0/);  
console.log(isIE8); // returns true or false 

If you =>

console.log(navigator.userAgent.match(/MSIE 8.0/));  
// returns either an Array or null

But if you =>

console.log(!!navigator.userAgent.match(/MSIE 8.0/));  
// returns either true or false

Ref: https://bit.ly/3ezKiqB