Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uint64_t fact_u64_tabular(uint64_t val, bool * oflow) {
- static
- uint64_t const factorials[] = {
- /* 0!*/ 0ULL, /* TODO: Added to make picking factorials intuitive */
- /* 1!*/ 1ULL,
- /* 2!*/ 2ULL,
- /* 3!*/ 6ULL,
- /* 4!*/ 24ULL,
- /* 5!*/ 120ULL,
- /* 6!*/ 720ULL,
- /* 7!*/ 5040ULL,
- /* 8!*/ 40320ULL,
- /* 9!*/ 362880ULL,
- /*10!*/ 3628800ULL,
- /*11!*/ 39916800ULL,
- /*12!*/ 479001600ULL, /* TODO: max factorial for 32-bit integers */
- /*13!*/ 6227020800ULL,
- /*14!*/ 87178291200ULL,
- /*15!*/ 1307674368000ULL,
- /*16!*/ 20922789888000ULL,
- /*17!*/ 355687428096000ULL,
- /*18!*/ 6402373705728000ULL,
- /*19!*/ 121645100408832000ULL,
- /*20!*/ 2432902008176640000ULL, /* TODO: max factorial for 64-bit integers */
- };
- size_t factorials_c = sizeof(factorials) / sizeof(*factorials);
- uint64_t fv = 0;
- if (val > 0 && val < factorials_c) {
- fv = factorials[val];
- *oflow = false;
- }
- else {
- fv = 0;
- *oflow = true;
- }
- return fv;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement