Flexible formatting of “multiprecision numbers”, i.e., objects
of class '>mpfr
. formatMpfr()
is also the
mpfr
method of the generic format
function.
The formatN()
methods for '>mpfr
numbers
renders them differently than their double precision equivalents, by
appending "_M"
.
formatMpfr(x, digits = NULL, trim = FALSE, scientific = NA,
base = 10, showNeg0 = TRUE, max.digits = Inf,
big.mark = "", big.interval = 3L,
small.mark = "", small.interval = 5L,
decimal.mark = ".",
exponent.char = if(base
an MPFR number (vector or array).
how many significant digits (in the base
chosen!)
are to be used in the result. The default, NULL
, uses enough
digits to represent the full precision, often one or two digits more
than “you” would expect. For base
s 2,4,8,16, or 32,
MPFR requires digits
at least 2. For such bases,
digits = 1
is changed into 2
, with a message.
logical; if FALSE
, numbers are right-justified to a
common width: if TRUE
the leading blanks for justification
are suppressed.
either a logical specifying whether
MPFR numbers should be encoded in scientific
format, or an integer penalty (see options("scipen")
).
Missing values correspond to the current default penalty.
an integer in base = 2
) or hexadecimal (base = 16
)
are particularly interesting.
logical indicating if “negative” zeros
should be shown with a "-"
. The default, TRUE
is
intentially different from format(<numeric>)
.
the “exponent” character to be used in
scientific notation. The default takes into account that for
base
"e"
is part of the
(mantissa) digits and the same is true for "E"
when
a (large) positive number to limit the number of
(mantissa) digits, notably when digits
is NULL
(as by
default). Otherwise, a numeric digits
is preferred to
setting max.digits
(which should not be smaller than
digits
).
used for prettying decimal sequences, these are passed to
prettyNum
and that help page explains the details.
further arguments passed to or from other methods.
a character vector or array, say cx
, of the same length as
x
. Since Rmpfr version 0.5-3 (2013-09), if x
is an
'>mpfrArray
, then cx
is a character
array
with the same dim
and
dimnames
as x
.
Note that in scientific notation, the integer exponent is always in
decimal, i.e., base 10 (even when base
is not 10), but
of course meaning base
powers, e.g., in base 32,
"u.giE3"
is the same as "ugi0"
which is "u.gi"
. This is in contrast, e.g., with
sprintf("%a", x)
where the powers after "p"
are
powers of
The MPFR manual's description of mpfr_get_str() which is the
C-internal workhorse for the (internal) R function .mpfr2str()
on which formatMpfr
builds.
mpfr
for creation and
the '>mpfr
class description with its many methods.
The format
generic, and the prettyNum
utility on which formatMpfr
is based as well.
The S3 generic function formatN
from package
gmp.
# NOT RUN {
## Printing of MPFR numbers uses formatMpfr() internally.
## Note how each components uses the "necessary" number of digits:
( x3 <- c(Const("pi", 168), mpfr(pi, 140), 3.14) )
format(x3[3], 15)
format(x3[3], 15, drop0 = TRUE)# "3.14" .. dropping the trailing zeros
x3[4] <- 2^30
x3[4] # automatically drops trailing zeros
format(x3[1], dig = 41, small.mark = "'") # (41 - 1 = ) 40 digits after "."
rbind(formatN( x3, digits = 15),
formatN(as.numeric(x3), digits = 15))
(Zero <- mpfr(c(0,1/-Inf), 20)) # 0 and "-0"
xx <- c(Zero, 1:2, Const("pi", 120), -100*pi, -.00987)
format(xx, digits = 2)
format(xx, digits = 1, showNeg0 = FALSE)# "-0" no longer shown
## Output in other bases :
formatMpfr(mpfr(10^6, 40), base=32, drop0trailing=TRUE)
## "ugi0"
mpfr("ugi0", base=32) #-> 1'000'000
# }
# NOT RUN {
i32 <- mpfr(1:32, precBits = 64)
format(i32, base= 2, drop0trailing=TRUE)
format(i32, base= 16, drop0trailing=TRUE)
format(1/i32, base= 2, drop0trailing=TRUE)# using scientific notation for [17..32]
format(1/i32, base= 32)
format(1/i32, base= 62, drop0trailing=TRUE)
format(mpfr(2, 64)^-(1:16), base=16, drop0trailing=TRUE)
# }
Run the code above in your browser using DataLab