in flink-ml-lib/src/main/java/org/apache/flink/ml/feature/polynomialexpansion/PolynomialExpansion.java [174:209]
private static int getResultVectorSize(int num, int degree) {
if (num == 0) {
return 1;
}
if (num == 1 || degree == 1) {
return num + degree;
}
if (degree > num) {
return getResultVectorSize(degree, num);
}
long res = 1;
int i = num + 1;
int j;
if (num + degree < 61) {
for (j = 1; j <= degree; ++j) {
res = res * i / j;
++i;
}
} else {
int depth;
for (j = 1; j <= degree; ++j) {
depth = ArithmeticUtils.gcd(i, j);
res = ArithmeticUtils.mulAndCheck(res / (j / depth), i / depth);
++i;
}
}
if (res > Integer.MAX_VALUE) {
throw new RuntimeException("The expended polynomial size is too large.");
}
return (int) res;
}