Large sized rationals
Class "bigq"
encodes rationals encoded as ratios of arbitrary
large integers (via GMP).
A simple S3 class (internally a raw
vector), it has been
registered as formal (S4) class (via setOldClass
), too.
as.bigq(n, d = 1) ## S3 method for class 'bigq' as.character(x, b=10,...) ## S3 method for class 'bigq' as.double(x,...) as.bigz.bigq(a, mod=NA) is.bigq(x) ## S3 method for class 'bigq' is.na(x) ## S3 method for class 'bigq' print(x, quote=FALSE, initLine = TRUE, ...) denominator(x) numerator(x) NA_bigq_ c_bigq(L)
n,d |
either integer, numeric or string value
(String value: either starting with |
a |
an element of class |
mod |
optional modulus to convert into biginteger |
x |
a “rational number” (vector), of class |
b |
base: from 2 to 36 |
... |
additional arguments passed to methods |
quote |
(for printing:) logical indicating if the numbers
should be quoted (as characters are); the default used to be
|
initLine |
(for printing:) logical indicating if an initial line (with the class and length or dimension) should be printed. |
L |
a |
as.bigz.bigq()
returns the smallest integers not less than the
corresponding rationals bigq.
NA_bigq_
is computed on package load time as as.bigq(NA)
.
An R object of (S3) class "bigq"
representing the parameter value.
Antoine Lucas
x <- as.bigq(21,6) x # 7 / 2 # Wow ! result is simplified. y <- as.bigq(5,3) # addition works ! x + y # You can even try multiplication, division... x * y / 13 # and, since May 2012, x ^ 20 stopifnot(is.bigq(x), is.bigq(x + y), x ^ 20 == as.bigz(7)^20 / 2^20) # convert to string, double as.character(x) as.double(x) stopifnot( is.na(NA_bigq_) ) # Depict the "S4-class" bigq, i.e., the formal (S4) methods: if(require("Rmpfr")) # mostly interesting there showMethods(class="bigq") # an sapply() version that works for big rationals "bigq": sapplyQ <- function(X, FUN, ...) c_bigq(lapply(X, FUN, ...)) # dummy example showing it works (here): qq <- as.bigq(1, 1:999) q1 <- sapplyQ(qq, function(q) q^2) stopifnot( identical(q1, qq^2) )
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.