Exact factorial numbers. For a fast approximation see
math-functions:Numeric.SpecFunctions.factorial instead. The
naive definition of the factorial numbers is:
factorial n
| n < 0 = 0
| otherwise = product [1..n]However, we use a fast algorithm based on the split-recursive form:
factorial n =
2^(n - popCount n) * product [(q k)^k | forall k, k >= 1]
where
q k = product [j | forall j, n*2^(-k) < j <= n*2^(-k+1), odd j]