function gamma(x)
{
	if(x==1)return 1;
	if(x<0)return Math.PI/(Math.sin(Math.PI*x)*gamma(1-x));
	if((x>0)&&(x<=2))return gamma(x+1)/x;
	return stirling(x-1);
}
function gammalog(x,b)
{
	var logb=1;
	if(b==null)b=Math.E;else logb=Math.log(b);
	if(x==1)return 0;
	if(x<0)return Math.log(Math.PI/(Math.sin(Math.PI*x)*gamma(1-x)))/logb;
	if((x>0)&&(x<=2))return Math.log(gamma(x+1)/x)/logb;
	return stirlinglog(x-1)/logb;
}

function beta(p,q)
{
	return gamma(p)*gamma(q)/gamma(p+q);
}

function faklog(n,b)// log(n!) zur Basis b (default: e)
{
	return gammalog(n+1,b);
}

function faksci(n)
{
	var x=faklog(n)/Math.LN10;
	var m=Math.floor(x);
	var a=Math.pow(10,x-m);
	return new Array(a,m);
}

function stirling(x)
{
 	return Math.exp(stirlinglog(x));
}

function stirlinglog(n)
{
	var s,b,k,nn,nq,x,xx,xxx;
	x=n;xx=x*x;xxx=xx*x;
	var x21=xxx*xxx*xxx*xxx*xxx*xxx*xxx,x23=x21*xx,x25=x23*xx,x27=x25*xx,x29=x27*xx,x31=x29*xx,x33=x31*xx;
	s=n*Math.log(n)-n+Math.log(2*Math.PI*n)/2;
	s+=1/(12*x)-1/(360*xxx)+1/(1260*xxx*xx)-1/(1680*xxx*xxx*x)+1/(1188*xxx*xxx*xxx)-691/(360360*xxx*xxx*xxx*xx)+1/(156*xxx*xxx*xxx*xxx*x)-3617/(122400*xxx*xxx*xxx*xxx*xxx)+43867/(244188*xxx*xxx*xxx*xxx*xxx*xx)-174611/(125400*xxx*xxx*xxx*xxx*xxx*xxx*x)
	if((n>=1.0001)&&(n<1.001))s+=2.81192864629006/x21+(-0.079174136363)/x23+(-4.91225104349411)/x25+4.302809933766/x27+0.238198778189/x29+(-1.684943586713)/x31+0.5607429250175/x33;
	else if((n>=1.001)&&(n<1.01))s+=3.27132905988994/x21+(-2.37160407488559)/x23+(-0.3978809149466)/x25+0.576472333827048/x27+0.361201827667416/x29+(-0.103661024669)/x31+(-0.09854570217)/x33;
	else if((n>=1.01)&&(n<1.1))s+=5.39104556326/x21+(-9.87338760112464)/x23+7.3038441955416/x25+2.30802171884208/x27+(-7.82077584028563)/x29+5.0493628662517/x31+(-1.1207993862331)/x33;
	else if((n>=1.1)&&(n<1.2))s+=6.30697063857625/x21+(-14.872102444518)/x23+17.5934287039763/x25+(-6.71550697405648)/x27+(-6.34853693911287)/x29+7.52803411/x31+(-2.255589400386)/x33;
	else if((n>=1.2)&&(n<1.3))s+=6.2563840755/x21+(-13.6815884563467)/x23+11.50219008/x25+6.6205186349678/x27+(-20.4475250330893)/x29+14.2099798405919/x31+(-3.19219087639073)/x33;
	else if((n>=1.3)&&(n<1.4))s+=6.5781656571705/x21+(-14.3695154505324)/x23+6.1229275816989/x25+31.6851372951914/x27+(-61.4580603447787)/x29+43.3659080511012/x31+(-10.450575414214)/x33;
	else if((n>=1.4)&&(n<1.5))s+=7.34941398214004/x21+(-20.472263889)/x23+25.4670761903388/x25+(-1.46312763359826)/x27+(-23.5489114298399)/x29+10.6471527517265/x31+4.9583914741881/x33;
	else if((n>=1.5)&&(n<1.6))s+=7.75048515207143/x21+(-22.5424633242803)/x23+23.6089171496225/x25+28.9692121709262/x27+(-90.7474602491245)/x29+62.0327318293893/x31+(-2.1466509854978)/x33;
	else if((n>=1.6)&&(n<2))s+=10.0951275158133/x21+(-50.938900117565)/x23+158.407425784243/x25+(-274.972669098642)/x27+196.518654805853/x29+72.1350827228288/x31+(-138.626288568482)/x33;
	else if((n>=2)&&(n<3))s+=8.12439107513/x21+32.6516633261172/x23+(-1101.51602207)/x25+9110.01524684352/x27+(-37405.4319334959)/x29+78061.9616083154/x31+(-66090.4660455126)/x33;
	else if((n>=3)&&(n<10))s+=11.6167436568089/x21+(-55.2617238685185)/x23+(-169.62826908853)/x25+2835.0149338178/x27+19202.3190111983/x29+(-892308.326048466)/x31+5887210.44591071/x33;
	return s;
}

function gammaverteilung(b,p,x)
{
	if(x<0)return 0;
	return gamma(p)/Math.pow(b,p)*Math.pow(x,p-1)*Math.exp(-b*x);
}
//alert(gamma(18)+"\n"+gammalog(18,10));