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.