# Probability Density Function of a Chi Distribution

I'm trying to write an extension for Google Sheets to add the `CHIDIST()` function as in Microsoft Excel and LibreOffice Calc. My current attempt does not produce the same results as the LibreOffice function. Any help would be greatly appreciated.

``````function CHIDIST(value, degrees_of_freedom) {
x = value;
v = degrees_of_freedom;
if(x>0) {
return (Math.pow(x,(v-2)/2)*Math.pow(Math.E,-x/2))/(Math.pow(2,v/2)*gamma(v/2));
}
else {
return 0;
}
}

function gamma(x){
var p = [0.99999999999980993, 676.5203681218851, -1259.1392167224028,
771.32342877765313, -176.61502916214059, 12.507343278686905,
-0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7];

var g = 7;
if(x < 0.5){
return Math.PI / (Math.sin(Math.PI * x)*gamma(1-x));
}

x -= 1;
var a = p[0];
var t = x+g+0.5;
for(var i = 1; i < p.length; i++){
a += p[i]/(x+i);
}

return Math.sqrt(2*Math.PI)*Math.pow(t, x+0.5)*Math.exp(-t)*a;
}
``````

This is the equation that I modeled the program after:

-

Your function works correctly, in the sense that it gives the probability density function of the χ²-distribution. It returns the same results as `=CHISQ.DIST(x,v,FALSE)` in Excel 2013. Note that "false" here means "not cumulative".
The LibreOffice function `=CHIDIST(x;v)` and (old-fashioned) Excel function `=CHIDIST(x,v)` return the right-tailed cumulative probability. Its modern Excel equivalent is `=CHISQ.DIST.RT(x,v)`.