private static int getResultVectorSize()

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;
        }