Formatting MPFR (multiprecision) Numbers
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, maybe.full = !is.null(digits) && is.na(scientific), base = 10, showNeg0 = TRUE, max.digits = Inf, big.mark = "", big.interval = 3L, small.mark = "", small.interval = 5L, decimal.mark = ".", exponent.char = if(base <= 14) "e" else if(base <= 36) "E" else "|e", exponent.plus = TRUE, zero.print = NULL, drop0trailing = FALSE, ...) ## S3 method for class 'mpfr' formatN(x, drop0trailing = TRUE, ...) .mpfr2str(x, digits = NULL, maybe.full = !is.null(digits), base = 10L)
x |
an MPFR number (vector or array). |
digits |
how many significant digits (in the |
trim |
logical; if |
scientific |
either a logical specifying whether
MPFR numbers should be encoded in scientific
format (“exponential representation”), or an integer penalty
(see |
maybe.full |
|
base |
an integer in 2,3,..,62; the base (“basis”)
in which the numbers should be represented. Apart from the default
base 10, binary ( |
showNeg0 |
logical indicating if “negative” zeros
should be shown with a |
exponent.char |
the “exponent” character to be used in
scientific notation. The default takes into account that for
|
exponent.plus |
|
max.digits |
a (large) positive number to limit the number of
(mantissa) digits, notably when |
big.mark, big.interval, small.mark,
small.interval, decimal.mark, zero.print, drop0trailing |
used for prettying decimal sequences, these are passed to
|
... |
further arguments passed to or from other methods. |
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 32^3 times
"u.gi"
. This is in contrast, e.g., with
sprintf("%a", x)
where the powers after "p"
are
powers of 2.
Martin Maechler
The MPFR manual's description of mpfr_get_str() which is the
C-internal workhorse for .mpfr2str()
(on which formatMpfr()
builds).
.mpfr_formatinfo(x)
provides the (cheap) non-string parts of
.mpfr2str(x)
; the (base 2) exp
exponents are also available
via .mpfr2exp(x)
.
## 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 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)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.