Returns the factorial of `n,' which should be a non-negative integer. The
result will returned as a floating-point number, single-float if possible,
otherwise double-float. If it is returned as a double-float, it won't
necessarily be integral, since the actual computation is
(exp (gamma-ln (1+ n)))
Implementation is loosely based on Numerical Recipes in C, section 6.1. On the
TI Explorer, the largest argument that won't cause a floating overflow is 170.