public static double AsymptFactorial(double x)
{
// error of order O(x^-5)
// double ln2Pi = 1.8378770664093455 = Math.log(2 * Math.PI);
double a = x + x + 1;
return (1.8378770664093455 + System.Math.Log(a / 2) * a - a
- (1 - 7 / (30 * a * a)) / (6 * a)) / 2;
}