Learn R Programming

Rmpfr (version 0.4-2)

factorialMpfr: Factorial 'n!' in Arbitrary Precision

Description

Efficiently compute $n!$ in arbitrary precision, using the MPFR-internal implementation. This is mathematically (but not numerically) the same as $\Gamma(n+1)$.

Usage

factorialMpfr(n, precBits = max(2, ceiling(lgamma(n+1)/log(2))))

Arguments

n
non-negative integer (vector).
precBits
desired precision in bits (binary digits); the default sets the precision high enough for the result to be exact.

Value

  • a number of (S4) class mpfr.

See Also

factorial and gamma in base R; chooseMpfr() and pochMpfr() (on the same page).

Examples

Run this code
factorialMpfr(200)

n <- 1000:1010
f1000 <- factorialMpfr(n)
stopifnot(1e-15 > abs(as.numeric(1 - lfactorial(n)/log(f1000))))

## Note that---astonishingly--- measurements show only
## *small* efficiency gain of ~ 10\% : over using the previous "technique"
system.time(replicate(8, f1e4 <- factorialMpfr(10000)))
system.time(replicate(8, f.1e4 <- factorial(mpfr(10000,
                            prec=1+lfactorial(10000)/log(2)))))

Run the code above in your browser using DataLab