docs: public static BigDecimal factorialUsingSpougeCached(BigDecimal x, MathContext mathContext) {
  		MathContext mc = new MathContext(mathContext.getPrecision() * 2, mathContext.getRoundingMode());
  
  		int a = mathContext.getPrecision() * 13 / 10;
  		List<BigDecimal> constants = getSpougeFactorialConstants(a);
  
  		BigDecimal bigA = BigDecimal.valueOf(a);
  
  		boolean negative = false;
  		BigDecimal factor = constants.get(0);
  		for (int k = 1; k < a; k++) {
  			BigDecimal bigK = BigDecimal.valueOf(k);
  			factor = factor.add(constants.get(k).divide(x.add(bigK), mc), mc);
  			negative = !negative;
  		}
  
  		BigDecimal result = pow(x.add(bigA, mc), x.add(BigDecimal.valueOf(0.5), mc), mc);
  		result = result.multiply(exp(x.negate().subtract(bigA, mc), mc), mc);
  		result = result.multiply(factor, mc);
  
  		return result.round(mathContext);
  	}