Rational Number Arithmetic

# S4 method for rationalS4,rationalS4
+(e1, e2)

# S4 method for integer,rationalS4
+(e1, e2)

# S4 method for rationalS4,integer
+(e1, e2)

# S4 method for numeric,rationalS4
+(e1, e2)

# S4 method for rationalS4,numeric
+(e1, e2)

# S3 method for rationalS3
+(e1, e2)

# S3 method for rationalR6
+(e1, e2)

# S4 method for rationalS4,rationalS4
*(e1, e2)

# S4 method for integer,rationalS4
*(e1, e2)

# S4 method for rationalS4,integer
*(e1, e2)

# S4 method for numeric,rationalS4
*(e1, e2)

# S4 method for rationalS4,numeric
*(e1, e2)

# S3 method for rationalS3
*(e1, e2)

# S3 method for rationalR6
*(e1, e2)

# S4 method for rationalS4,rationalS4
/(e1, e2)

# S4 method for integer,rationalS4
/(e1, e2)

# S4 method for rationalS4,integer
/(e1, e2)

# S4 method for numeric,rationalS4
/(e1, e2)

# S4 method for rationalS4,numeric
/(e1, e2)

# S3 method for rationalS3
/(e1, e2)

# S3 method for rationalR6
/(e1, e2)

# S4 method for rationalS4,rationalS4
^(e1, e2)

# S4 method for rationalS4,integer
^(e1, e2)

# S4 method for integer,rationalS4
^(e1, e2)

# S4 method for rationalS4,numeric
^(e1, e2)

# S4 method for numeric,rationalS4
^(e1, e2)

# S3 method for rationalS3
^(e1, e2)

# S3 method for rationalR6
^(e1, e2)

# S4 method for rationalS4,rationalS4
%/%(e1, e2)

# S4 method for integer,rationalS4
%/%(e1, e2)

# S4 method for rationalS4,integer
%/%(e1, e2)

# S4 method for numeric,rationalS4
%/%(e1, e2)

# S4 method for rationalS4,numeric
%/%(e1, e2)

# S3 method for rationalS3
%/%(e1, e2)

# S3 method for rationalR6
%/%(e1, e2)

# S4 method for rationalS4,rationalS4
%%(e1, e2)

# S4 method for integer,rationalS4
%%(e1, e2)

# S4 method for rationalS4,integer
%%(e1, e2)

# S4 method for numeric,rationalS4
%%(e1, e2)

# S4 method for rationalS4,numeric
%%(e1, e2)

# S3 method for rationalS3
%%(e1, e2)

# S3 method for rationalR6
%%(e1, e2)

# S4 method for rationalS4,rationalS4
-(e1, e2)

# S4 method for integer,rationalS4
-(e1, e2)

# S4 method for rationalS4,integer
-(e1, e2)

# S4 method for numeric,rationalS4
-(e1, e2)

# S4 method for rationalS4,numeric
-(e1, e2)

# S3 method for rationalS3
-(e1, e2)

# S3 method for rationalR6
-(e1, e2)

Arguments

e1

rational numbers, integers, or numerics

e2

rational numbers, integers, or numerics

Fields

add

for R6 classes, using the $add(e1) to do addition is the fastest method

Examples

a <- rational(1L,2L,"S4") b <- rational(3L,5L,"S4") d <- a + b stopifnot(d@n == 11) stopifnot(d@d == 10) a <- 7L b <- rational(3L,5L,"S4") d <- a + b stopifnot(d@n == 38) stopifnot(d@d == 5) a <- rational(1L,2L,"S4") b <- 7L d <- a + b stopifnot(d@n == 15) stopifnot(d@d == 2) a <- 7 b <- rational(3L,5L,"S4") d <- a + b stopifnot(abs(d - 7.6) < 1E-12) a <- rational(1L,2L,"S4") b <- 7 d <- a + b stopifnot(abs(d - 7.5) < 1E-12) a <- rational(1L,2L,"S3") b <- rational(3L,5L,"S3") d <- a + b stopifnot(d$n == 11) stopifnot(d$d == 10) a <- 7L b <- rational(3L,5L,"S3") d <- a + b stopifnot(d$n == 38) stopifnot(d$d == 5) a <- rational(1L,2L,"S3") b <- 7L d <- a + b stopifnot(d$n == 15) stopifnot(d$d == 2) a <- 7 b <- rational(3L,5L,"S3") d <- a + b stopifnot(abs(d - 7.6) < 1E-12) a <- rational(1L,2L,"S3") b <- 7 d <- a + b stopifnot(abs(d - 7.5) < 1E-12) a <- rational(1L,2L,"R6") b <- rational(3L,5L,"R6") d <- a + b stopifnot(d$getNumerator() == 11) stopifnot(d$getDenominator() == 10) a <- 7L b <- rational(3L,5L,"R6") d <- a + b stopifnot(d$getNumerator() == 38) stopifnot(d$getDenominator() == 5) a <- rational(1L,2L,"R6") b <- 7L d <- a + b stopifnot(d$getNumerator() == 15) stopifnot(d$getDenominator() == 2) a <- 7 b <- rational(3L,5L,"R6") d <- a + b stopifnot(abs(d - 7.6) < 1E-12) a <- rational(1L,2L,"R6") b <- 7 d <- a + b stopifnot(abs(d - 7.5) < 1E-12) a <- rational(1L,2L,"R6") b <- rational(3L,5L,"R6") a$add(b)
#> [1] "(11 / 10) = 1.1"
stopifnot(a$getNumerator() == 11) stopifnot(a$getDenominator() == 10) a <- rational(1L,2L,"R6") b <- 7L a$add(b)
#> [1] "(15 / 2) = 7.5"
stopifnot(a$getNumerator() == 15) stopifnot(a$getDenominator() == 2) a <- rational(1L,2L,"S4") b <- rational(3L,5L,"S4") d <- a * b stopifnot(d@n == 3) stopifnot(d@d == 10) a <- 7L b <- rational(3L,5L,"S4") d <- a * b stopifnot(d@n == 21) stopifnot(d@d == 5) a <- rational(1L,2L,"S4") b <- 7L d <- a * b stopifnot(d@n == 7) stopifnot(d@d == 2) a <- 7 b <- rational(3L,5L,"S4") d <- a * b stopifnot(abs(d - 4.2) < 1E-12) a <- rational(1L,2L,"S4") b <- 7 d <- a * b stopifnot(abs(d - 3.5) < 1E-12) a <- rational(1L,2L,"S3") b <- rational(3L,5L,"S3") d <- a * b stopifnot(d$n == 3) stopifnot(d$d == 10) a <- 7L b <- rational(3L,5L,"S3") d <- a * b stopifnot(d$n == 21) stopifnot(d$d == 5) a <- rational(1L,2L,"S3") b <- 7L d <- a * b stopifnot(d$n == 7) stopifnot(d$d == 2) a <- 7 b <- rational(3L,5L,"S3") d <- a * b stopifnot(abs(d - 4.2) < 1E-12) a <- rational(1L,2L,"S3") b <- 7 d <- a * b stopifnot(abs(d - 3.5) < 1E-12) a <- rational(1L,2L,"R6") b <- rational(3L,5L,"R6") d <- a * b stopifnot(d$getNumerator() == 3) stopifnot(d$getDenominator() == 10) a <- 7L b <- rational(3L,5L,"R6") d <- a * b stopifnot(d$getNumerator() == 21) stopifnot(d$getDenominator() == 5) a <- rational(1L,2L,"R6") b <- 7L d <- a * b stopifnot(d$getNumerator() == 7) stopifnot(d$getDenominator() == 2) a <- 7 b <- rational(3L,5L,"R6") d <- a * b stopifnot(abs(d - 4.2) < 1E-12) a <- rational(1L,2L,"R6") b <- 7 d <- a * b stopifnot(abs(d - 3.5) < 1E-12) a <- rational(1L,2L,"R6") b <- rational(3L,5L,"R6") a$multiply(b)
#> [1] "(3 / 10) = 0.3"
stopifnot(a$getNumerator() == 3) stopifnot(a$getDenominator() == 10) a <- rational(1L,2L,"R6") b <- 7L a$multiply(b)
#> [1] "(7 / 2) = 3.5"
stopifnot(a$getNumerator() == 7) stopifnot(a$getDenominator() == 2) a <- rational(1L,2L,"S4") b <- rational(3L,5L,"S4") d <- a / b stopifnot(d@n == 5) stopifnot(d@d == 6) a <- 7L b <- rational(3L,5L,"S4") d <- a / b stopifnot(d@n == 35) stopifnot(d@d == 3) a <- rational(1L,2L,"S4") b <- 7L d <- a / b stopifnot(d@n == 1) stopifnot(d@d == 14) a <- 7 b <- rational(3L,5L,"S4") d <- a / b stopifnot(abs(d - 7*5/3) < 1E-12) a <- rational(1L,2L,"S4") b <- 7 d <- a / b stopifnot(abs(d - 1/14) < 1E-12) a <- rational(1L,2L,"S3") b <- rational(3L,5L,"S3") d <- a / b stopifnot(d$n == 5) stopifnot(d$d == 6) a <- 7L b <- rational(3L,5L,"S3") d <- a / b stopifnot(d$n == 35) stopifnot(d$d == 3) a <- rational(1L,2L,"S3") b <- 7L d <- a / b stopifnot(d$n == 1) stopifnot(d$d == 14) a <- 7 b <- rational(3L,5L,"S3") d <- a / b stopifnot(abs(d - 7*5/3) < 1E-12) a <- rational(1L,2L,"S3") b <- 7 d <- a / b stopifnot(abs(d - 1/14) < 1E-12) a <- rational(1L,2L,"R6") b <- rational(3L,5L,"R6") d <- a / b stopifnot(d$getNumerator() == 5) stopifnot(d$getDenominator() == 6) a <- 7L b <- rational(3L,5L,"R6") d <- a / b stopifnot(d$getNumerator() == 35) stopifnot(d$getDenominator() == 3) a <- rational(1L,2L,"R6") b <- 7L d <- a / b stopifnot(d$getNumerator() == 1) stopifnot(d$getDenominator() == 14) a <- 7 b <- rational(3L,5L,"R6") d <- a / b stopifnot(abs(d - 7*5/3) < 1E-12) a <- rational(1L,2L,"R6") b <- 7 d <- a / b stopifnot(abs(d - 1/14) < 1E-12) a <- rational(1L,2L,"R6") b <- rational(3L,5L,"R6") a$divide(b)
#> [1] "(5 / 6) = 0.833333333333333"
stopifnot(a$getNumerator() == 5) stopifnot(a$getDenominator() == 6) a <- rational(1L,2L,"R6") b <- 7L a$divide(b)
#> [1] "(1 / 14) = 0.0714285714285714"
stopifnot(a$getNumerator() == 1) stopifnot(a$getDenominator() == 14) a <- rational(1L,2L,"S4") b <- rational(3L,5L,"S4") a ^ b
#> [1] 0.659754
a <- rational(1L,2L,"S4") b <- 3L a ^ b
#> (1 / 8) = 0.125
a <- 2L b <- rational(3L,5L,"S4") a ^ b
#> [1] 1.515717
a <- rational(1L,2L,"S4") b <- 1.5 a ^ b
#> [1] 0.3535534
a <- 3.1 b <- rational(3L,5L,"S4") a ^ b
#> [1] 1.971592
a <- rational(1L,2L,"S3") b <- rational(3L,5L,"S3") d <- 3L e <- 1.5 a ^ b
#> [1] 0.659754
d ^ b
#> [1] 1.933182
a ^ d
#> [1] "(1 / 8) = 0.125"
e ^ b
#> [1] 1.275425
d ^ e
#> [1] 5.196152
a <- rational(1L,2L,"R6") b <- rational(3L,5L,"R6") d <- 3L e <- 1.5 a ^ b
#> [1] 0.659754
d ^ b
#> [1] 1.933182
a ^ d
#> [1] "(1 / 8) = 0.125"
e ^ b
#> [1] 1.275425
d ^ e
#> [1] 5.196152
a <- rational(3L,1L,"S4") b <- rational(2L,1L,"S4") a %/% b
#> [1] 1
a <- 3L b <- rational(2L,1L,"S4") a %/% b
#> [1] 1
a <- rational(3L,1L,"S4") b <- 2L a %/% b
#> [1] 1
a <- 3.5 b <- rational(2L,1L,"S4") a %/% b
#> [1] 1
a <- rational(3L,1L,"S4") b <- 2.1 a %/% b
#> [1] 1
a <- rational(1L,2L,"S3") b <- rational(3L,5L,"S3") d <- 3L e <- 1.5 a %/% b
#> [1] 0
d %/% b
#> [1] 5
a %/% d
#> [1] 0
e %/% b
#> [1] 2
d %/% e
#> [1] 2
a <- rational(1L,2L,"R6") b <- rational(3L,5L,"R6") d <- 3L e <- 1.5 a %/% b
#> [1] 0
d %/% b
#> [1] 5
a %/% d
#> [1] 0
e %/% b
#> [1] 2
d %/% e
#> [1] 2
a <- rational(5L, 1L, "S4") b <- rational(2L, 1L, "S4") d <- rational(3L, 2L, "S4") e <- rational(1L, 2L, "S4") stopifnot(rational(1L, 1L, "S4") == a %% b) stopifnot(rational(0L, 1L, "S4") == d %% e) stopifnot(rational(1L, 1L, "S4") == 5L %% b) stopifnot(rational(1L, 1L, "S4") == a %% 2L) stopifnot(rational(0L, 1L, "S4") == 2L %% e) stopifnot(1 == 5 %% b) stopifnot(1 == a %% 2) a <- rational(5L, 1L, "S3") b <- rational(2L, 1L, "S3") d <- rational(3L, 2L, "S3") e <- rational(1L, 2L, "S3") stopifnot(rational(1L, 1L, "S3") == a %% b) stopifnot(rational(0L, 1L, "S3") == d %% e) stopifnot(rational(1L, 1L, "S3") == 5L %% b) stopifnot(rational(1L, 1L, "S3") == a %% 2L) stopifnot(rational(0L, 1L, "S3") == 2L %% e) stopifnot(1 == 5 %% b) stopifnot(1 == a %% 2) a <- rational(5L, 1L, "R6") b <- rational(2L, 1L, "R6") d <- rational(3L, 2L, "R6") e <- rational(1L, 2L, "R6") stopifnot(rational(1L, 1L, "R6") == a %% b) stopifnot(rational(0L, 1L, "R6") == d %% e) stopifnot(rational(1L, 1L, "R6") == 5L %% b) stopifnot(rational(1L, 1L, "R6") == a %% 2L) stopifnot(rational(0L, 1L, "R6") == 2L %% e) stopifnot(1 == 5 %% b) stopifnot(1 == a %% 2) a <- rational(1L,2L,"S4") b <- rational(3L,5L,"S4") d <- a - b stopifnot(d@n == -1) stopifnot(d@d == 10) a <- 7L b <- rational(3L,5L,"S4") d <- a - b stopifnot(d@n == 32) stopifnot(d@d == 5) a <- rational(1L,2L,"S4") b <- 7L d <- a - b stopifnot(d@n == -13) stopifnot(d@d == 2) a <- 7 b <- rational(3L,5L,"S4") d <- a - b stopifnot(abs(d - 6.4) < 1E-12) a <- rational(1L,2L,"S4") b <- 7 d <- a - b stopifnot(abs(d - -6.5) < 1E-12) a <- rational(1L,2L,"S3") b <- rational(3L,5L,"S3") d <- a - b stopifnot(d$n == -1) stopifnot(d$d == 10) a <- 7L b <- rational(3L,5L,"S3") d <- a - b stopifnot(d$n == 32) stopifnot(d$d == 5) a <- rational(1L,2L,"S3") b <- 7L d <- a - b stopifnot(d$n == -13) stopifnot(d$d == 2) a <- 7 b <- rational(3L,5L,"S3") d <- a - b stopifnot(abs(d - 6.4) < 1E-12) a <- rational(1L,2L,"S3") b <- 7 d <- a - b stopifnot(abs(d - -6.5) < 1E-12) a <- rational(1L,2L,"R6") b <- rational(3L,5L,"R6") d <- a - b stopifnot(d$getNumerator() == -1) stopifnot(d$getDenominator() == 10) a <- 7L b <- rational(3L,5L,"R6") d <- a - b stopifnot(d$getNumerator() == 32) stopifnot(d$getDenominator() == 5) a <- rational(1L,2L,"R6") b <- 7L d <- a - b stopifnot(d$getNumerator() == -13) stopifnot(d$getDenominator() == 2) a <- 7 b <- rational(3L,5L,"R6") d <- a - b stopifnot(abs(d - 6.4) < 1E-12) a <- rational(1L,2L,"R6") b <- 7 d <- a - b stopifnot(abs(d - -6.5) < 1E-12) a <- rational(1L,2L,"R6") b <- rational(3L,5L,"R6") a$subtract(b)
#> [1] "(-1 / 10) = -0.1"
stopifnot(a$getNumerator() == -1) stopifnot(a$getDenominator() == 10) a <- rational(1L,2L,"R6") b <- 7L a$subtract(b)
#> [1] "(-13 / 2) = -6.5"
stopifnot(a$getNumerator() == -13) stopifnot(a$getDenominator() == 2)