mpfr {Rmpfr}  R Documentation 
Create multiple (i.e. typically high) precision numbers, to be used in arithmetic and mathematical computations with R.
mpfr(x, precBits, ...)
## Default S3 method:
mpfr(x, precBits, base = 10,
rnd.mode = c("N","D","U","Z","A"), scientific = NA, ...)
Const(name = c("pi", "gamma", "catalan", "log2"), prec = 120L,
rnd.mode = c("N","D","U","Z","A"))
is.mpfr(x)
x 

precBits , prec 
a number, the maximal precision to be used, in
bits; i.e. 
base 
(only when 
rnd.mode 
a 1letter string specifying how rounding should happen at Clevel conversion to MPFR, see details. 
scientific 
(used only when 
name 
a string specifying the mpfrlib  internal constant
computation. 
... 
potentially further arguments passed to and from methods. 
The "mpfr"
method of mpfr()
is a simple
wrapper around roundMpfr()
.
MPFR supports the following rounding modes,
round to nearest (roundTiesToEven in IEEE 7542008).
round toward zero (roundTowardZero in IEEE 7542008).
round toward plus infinity (“Up”, roundTowardPositive in IEEE 7542008).
round toward minus infinity (“Down”, roundTowardNegative in IEEE 7542008).
round away from zero (new since MPFR 3.0.0).
The ‘round to nearest’ ("N"
) mode, the default here,
works as in the IEEE 754 standard: in case the number to be rounded
lies exactly in the middle of two representable numbers, it is rounded
to the one with the least significant bit set to zero. For example,
the number 5/2, which is represented by (10.1) in binary, is rounded
to (10.0)=2 with a precision of two bits, and not to (11.0)=3. This
rule avoids the "drift" phenomenon mentioned by Knuth in volume 2 of
The Art of Computer Programming (Section 4.2.2).
When x
is character
, mpfr()
will detect the precision of the input object.
an object of (S4) class mpfr
, or for
mpfr(x)
when x
is an array,
mpfrMatrix
, or mpfrArray
which the user should just as a normal numeric vector or array.
is.mpfr()
returns TRUE
or FALSE
.
Martin Maechler
The MPFR team. (202x). GNU MPFR – The Multiple Precision FloatingPoint Reliable Library; see https://www.mpfr.org/mpfrcurrent/#doc or directly https://www.mpfr.org/mpfrcurrent/mpfr.pdf.
The class documentation mpfr
contains more
details. Use asNumeric
to transform back to double
precision ("numeric
").
mpfr(pi, 120) ## the doubleprecision pi "translated" to 120bit precision
pi. < Const("pi", prec = 260) # pi "computed" to correct 260bit precision
pi. # nicely prints 80 digits [260 * log10(2) ~= 78.3 ~ 80]
Const("gamma", 128L) # 0.5772...
Const("catalan", 128L) # 0.9159...
x < mpfr(0:7, 100)/7 # a more precise version of k/7, k=0,..,7
x
1 / x
## character input :
mpfr("2.718281828459045235360287471352662497757")  exp(mpfr(1, 150))
## ~= 4 * 10^40
## Also works for NA, NaN, ... :
cx < c("1234567890123456", 345, "NA", "NaN", "Inf", "Inf")
mpfr(cx)
## with some 'base' choices :
print(mpfr("111.1111", base=2)) * 2^4
mpfr("af21.01020300a0b0c", base=16)
## 68 bit prec. 44833.00393694653820642
mpfr("ugi0", base = 32) == 10^6 ## TRUE
##  Large integers from package 'gmp':
Z < as.bigz(7)^(1:200)
head(Z, 40)
## mfpr(Z) by default chooses the correct *maximal* default precision:
mZ. < mpfr(Z)
## more efficiently chooses precision individually
m.Z < mpfr(Z, precBits = frexpZ(Z)$exp)
## the precBits chosen are large enough to keep full precision:
stopifnot(identical(cZ < as.character(Z),
as(mZ.,"character")),
identical(cZ, as(m.Z,"character")))
## compare mpfrarithmetic with exact rational one:
stopifnot(all.equal(mpfr(as.bigq(355,113), 99),
mpfr(355, 99) / 113, tol = 2^98))
## look at different "rounding modes":
sapply(c("N", "D","U","Z","A"), function(RND)
mpfr(c(1,1)/5, 20, rnd.mode = RND), simplify=FALSE)
symnum(sapply(c("N", "D","U","Z","A"),
function(RND) mpfr(0.2, prec = 5:15, rnd.mode = RND) < 0.2 ))