# factorialMpfr: Factorial 'n!' in Arbitrary Precision In Rmpfr: R MPFR - Multiple Precision Floating-Point Reliable

## Description

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

`factorialZ` (package gmp) should typically be used instead of `factorialMpfr()` nowadays. Hence, `factorialMpfr` now is somewhat deprecated.

## Usage

 ```1 2``` ```factorialMpfr(n, precBits = max(2, ceiling(lgamma(n+1)/log(2))), rnd.mode = c("N","D","U","Z","A")) ```

## 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. `rnd.mode` a 1-letter string specifying how rounding should happen at C-level conversion to MPFR, see `mpfr`.

## Value

a number of (S4) class `mpfr`.

`factorial` and `gamma` in base R.

`factorialZ` (package gmp), to replace `factorialMpfr`, see above.

`chooseMpfr()` and `pochMpfr()` (on the same page).

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11``` ```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))))) ```

Rmpfr documentation built on Aug. 19, 2018, 3 a.m.