package com.cloudera.science.mgps;
import org.apache.commons.math.special.Gamma;
import org.apache.commons.math.util.MathUtils;
private final double alpha;
private final double beta;
public NFunction(
double alpha,
double beta) {
this.alpha = alpha;
this.beta = beta;
}
public double eval(
int n,
double e) {
double x = -n * Math.log(1 + beta / e);
double y = -alpha * Math.log(1 + e / beta);
double z = Gamma.logGamma(alpha + n);
double d = Gamma.logGamma(alpha) + MathUtils.factorialLog(n);
return Math.exp(x + y + z - d);
}
}