Flexibly Format Numbers in Binary, Hex and Decimal Format
Show numbers in binary, hex and decimal format. The resulting
character-like objects can be back-transformed to "mpfr"
numbers via mpfr()
.
formatHex(x, precBits = min(getPrec(x)), style = "+", expAlign = TRUE) formatBin(x, precBits = min(getPrec(x)), scientific = TRUE, left.pad = "_", right.pad = left.pad, style = "+", expAlign = TRUE) formatDec(x, precBits = min(getPrec(x)), digits = decdigits, nsmall = NULL, scientific = FALSE, style = "+", decimalPointAlign = TRUE, ...)
x |
a |
precBits |
integer, the number of bits of precision, typically
derived from |
style |
a single character, to be used in |
expAlign |
|
scientific |
|
... |
additional optional arguments.
|
left.pad, right.pad |
characters (one-character strings) that
will be used for left- and right-padding of the formatted string
when |
nsmall |
only used when |
digits |
integer; the number of decimal digits displayed is the
larger of this argument and the internally generated value that is a
function of |
decimalPointAlign |
logical indicating if padding should be used
to ensure that the resulting strings align on the decimal point
( |
For the hexadecimal representation, when the precision is not larger
than double precision, sprintf()
is used directly,
otherwise formatMpfr()
is used and post processed.
For the binary representation, the hexadecimal value is calculated and
then edited by
substitution of the binary representation of the hex characters coded
in the HextoBin
vector. For binary with scientific=FALSE
, the
result of the scientific=TRUE
version is edited to align binary
points. For the decimal representation, the hexadecimal value is
calculated with the specified precision and then sent to the
format
function for scientific=FALSE
or to the sprintf
function for scientific=TRUE
.
a character vector (or matrix) like x
, say r
, containing
the formatted represention of x
, with a class
(unless left.pad
or right.pad
were not "_"
). In
that case, formatHex()
and formatBin()
return class
"Ncharacter"
; for that,
mpfr(.)
has a method and will basically return x
,
i.e., work as inverse function.
Since Rmpfr version 0.6-2
, the S3 class
"Ncharacter"
extends "character"
.
(class(.)
is now of length two and class(.)[2]
is
"character"
.). There are simple [
and print
methods; modifying or setting dim
works as well.
Richard M. Heiberger rmh@temple.edu, with minor tweaking by Martin M.
R FAQ 7.31: Why doesn't R think these numbers are equal?
system.file("../../doc/FAQ")
FourBits <- mpfr(matrix(0:31, 8, 4, dimnames = list(0:7, c(0,8,16,24))), precBits=4) ## 4 significant bits FourBits formatHex(FourBits) formatBin(FourBits, style = " ") formatBin(FourBits, scientific=FALSE) formatDec(FourBits) ## as "Ncharacter" 'inherits from' "character", this now works too : data.frame(Dec = c( formatDec(FourBits) ), formatHex(FourBits), Bin = formatBin(FourBits, style = " ")) FBB <- formatBin(FourBits) ; clB <- class(FBB) (nFBB <- mpfr(FBB)) stopifnot(class(FBB)[1] == "Ncharacter", all.equal(nFBB, FourBits, tol=0)) FBH <- formatHex(FourBits) ; clH <- class(FBH) (nFBH <- mpfr(FBH)) stopifnot(class(FBH)[1] == "Ncharacter", all.equal(nFBH, FourBits, tol=0)) ## Compare the different "formattings" (details will change, i.e. improve!)%% FIXME M <- mpfr(c(-Inf, -1.25, 1/(-Inf), NA, 0, .5, 1:2, Inf), 3) data.frame(fH = formatHex(M), f16 = format(M, base=16), fB = formatBin(M), f2 = format(M, base= 2), fD = formatDec(M), f10 = format(M), # base = 10 is default fSci= format(M, scientific=TRUE), fFix= format(M, scientific=FALSE)) ## Other methods ("[", t()) also work : stopifnot(dim(F1 <- FBB[, 1, drop=FALSE]) == c(8,1), identical(class( F1), clB), dim(t(F1)) == c(1,8), identical(class(t(F1)),clB), is.null(dim(F.2 <- FBB[,2])), identical(class( F.2), clB), dim(F22 <- FBH[1:2, 3:4]) == c(2,2), identical(class(F22), clH), identical(class(FBH[2,3]), clH), is.null(dim(FBH[2,3])), identical(FBH[2,3:4], F22[2,]), identical(FBH[2,3], unname(FBH[,3][2])), TRUE) TenFrac <- matrix((1:10)/10, dimnames=list(1:10, expression(1/x))) TenFrac9 <- mpfr(TenFrac, precBits=9) ## 9 significant bits TenFrac9 formatHex(TenFrac9) formatBin(TenFrac9) formatBin(TenFrac9, scientific=FALSE) formatDec(TenFrac9) formatDec(TenFrac9, precBits=10)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.