Raymond Hettinger <raymond.hettin...@gmail.com> added the comment:
FWIW, here's a rough implementation of (3). It is limited to a specific range to avoid excess memory usage. For comb(50_000, 25_000), it gives a three-fold speedup: if (k_long > 20 && k_long > n_long / 3 && n_long <= 100000) { PyObject *den = math_factorial(module, k); /* den = k! */ temp = PyNumber_Subtract(n, k); Py_SETREF(temp, math_factorial(module, temp)); Py_SETREF(den, PyNumber_Multiply(den, temp)); /* den *= (n - k)! */ Py_DECREF(temp); Py_SETREF(result, math_factorial(module, n)); /* result = n! */ Py_SETREF(result, PyNumber_FloorDivide(result, den)); /* result //= (n-k)! */ Py_DECREF(den); return result; } > Can the suggested performance improvements go into 3.8, or should they wait > for 3.9? > It's not clear to me whether a performance improvement after feature freeze > is okay or not. Historically, we've used the beta phase for optimizations, tweaking APIs, and improving docs. However, I'm in no rush and this can easily wait for 3.9. My only concern is that the other math functions, except for factorial(), have bounded running times and memory usage, so performance is more of a concern for this function which could end-up being an unexpected bottleneck or being a vector for a DOS attack. That said, we haven't had any negative reports regarding factorial(), so this may be a low priority. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue37295> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com