library("broadcast")
<- c(4:2)
x.dim <- prod(x.dim)
x.len <- sample(c(NA, 1.1:1000.1), x.len, TRUE)
x.data <- array(x.data, x.dim)
x <- array(1:50, c(4,1,1))
y
bc.i(x, y, "+")
## , , 1
##
## [,1] [,2] [,3]
## [1,] 141 506 554
## [2,] 864 746 762
## [3,] 689 573 49
## [4,] 797 862 625
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 811 110 282
## [2,] 93 249 661
## [3,] 437 538 533
## [4,] 928 308 75
bc.i(x, y, "-")
## , , 1
##
## [,1] [,2] [,3]
## [1,] 139 504 552
## [2,] 860 742 758
## [3,] 683 567 43
## [4,] 789 854 617
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 809 108 280
## [2,] 89 245 657
## [3,] 431 532 527
## [4,] 920 300 67
bc.i(x, y, "*")
## , , 1
##
## [,1] [,2] [,3]
## [1,] 140 505 553
## [2,] 1724 1488 1520
## [3,] 2058 1710 138
## [4,] 3172 3432 2484
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 810 109 281
## [2,] 182 494 1318
## [3,] 1302 1605 1590
## [4,] 3696 1216 284
bc.i(x, y, "gcd") # greatest common divisor
## , , 1
##
## [,1] [,2] [,3]
## [1,] 1 1 1
## [2,] 2 2 2
## [3,] 1 3 1
## [4,] 1 2 1
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 1 1 1
## [2,] 1 1 1
## [3,] 1 1 1
## [4,] 4 4 1
bc.i(x, y, "^")
## , , 1
##
## [,1] [,2] [,3]
## [1,] 140 505 5.53000e+02
## [2,] 743044 553536 5.77600e+05
## [3,] 322828856 185193000 9.73360e+04
## [4,] 395451064801 541937434896 1.48719e+11
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 810 109 281
## [2,] 8281 61009 434281
## [3,] 81746504 153130375 148877000
## [4,] 728933458176 8540717056 25411681
bc.i(x, y, "==")
## , , 1
##
## [,1] [,2] [,3]
## [1,] FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE
bc.i(x, y, "!=")
## , , 1
##
## [,1] [,2] [,3]
## [1,] TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE
bc.i(x, y, "<")
## , , 1
##
## [,1] [,2] [,3]
## [1,] FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE
bc.i(x, y, ">")
## , , 1
##
## [,1] [,2] [,3]
## [1,] TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE
bc.i(x, y, "<=")
## , , 1
##
## [,1] [,2] [,3]
## [1,] FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE
bc.i(x, y, ">=")
## , , 1
##
## [,1] [,2] [,3]
## [1,] TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE
bc.i
Broadcasted Integer Numeric Operations with Extra Overflow Protection
Description
The bc.i()
function performs broadcasted integer numeric operations on 2 numeric or logical arrays.
Please note that these operations will treat the input as (double
typed) integers, and will efficiently truncate when necessary.
Therefore, something like bc.i(1, 1.5, “==”)
returns TRUE
, because trunc(1.5)
equals 1
.
Usage
bc.i(x, y, op, ...)
## S4 method for signature 'ANY'
bc.i(x, y, op)
Arguments
x , y
|
conformable logical or numeric arrays. |
op
|
a single string, giving the operator. Supported arithmetic operators: +, -, *, gcd, %%, %/%, ^, pmin, pmax. Supported relational operators: ==, !=, <, >, <=, >=. The "gcd" operator performs the Greatest Common Divisor" operation, using the Euclidean algorithm. |
…
|
further arguments passed to or from methods. |
Value
For arithmetic operators:
A numeric array of whole numbers, as a result of the broadcasted arithmetic operation.
Base ‘R’ supports integers from -2^53
to 2^53
, which thus range from approximately -9
quadrillion to +9
quadrillion.
Values outside of this range will be returned as -Inf
or Inf
, as an extra protection against integer overflow.
For relational operators:
A logical array as a result of the broadcasted integer relational comparison.