Brobdingnagian numbers
brob.RdCreate, coerce to or test for a Brobdingnagian object
Usage
brob(x = double(), positive)
as.brob(x)
is.brob(x)Details
Function as.brob() is the user's workhorse: use this to coerce
numeric vectors to brobs.
Function is.brob() tests for its arguments being of class
brob.
Function brob() takes argument x and returns a brob
formally equal to \(e^x\); set argument positive to
FALSE to return \(-e^x\). Thus calling function
exp(x) simply returns brob(x). This function is not
really intended for the end user: it is confusing and includes no
argument checking. In general numerical work, use function
as.brob() instead, although be aware that if you really really
want \(e^{10^7}\), you should use brob(1e7);
this would be an exact representation.
Note
Real numbers are represented by two objects: a real, holding the logarithm of their absolute values; and a logical, indicating the sign. Multiplication and exponentiation are easy: the challenge is addition. This is achieved using the (trivial) identity \(\log(e^x+e^y)=x+\log(1+e^{y-x})\) where, WLOG, \(y<x\).
Complex numbers are stored as a pair of brobs: objects of class
glub.
The package is a simple example of S4 methods. However, it could be viewed as a cautionary tale: the underlying R concepts are easy yet the S4 implementation is long and difficult. I would not recommend using S4 methods for a package as simple as this; S3 methods would have been perfectly adequate. I would suggest that S4 methods should only be used when S3 methods are demonstrably inadequate.
The package has poor handling of NA and NaN. Currently,
as.brob(1) + as.brob(c(1,NA)) returns an error.