+ x
- x
x + y
x - y
x * y
x / y
x ^ y
x %% y
x %/% y
Arith
group generic,
and so methods can be written for them individually as well as for the
group generic (or the Ops
group generic), with arguments
c(e1, e2)
(with e2
missing for a unary operator)..Machine
) may differ
between platforms and even between calculations on a single platform. Another potential issue is signed zeroes: on IEC 60659 platforms there
are two zeroes with internal representations differing by sign. Where
possible R treats them as the same, but for example direct output
from C code often does not do so and may output -0.0 (and on
Windows whether it does so or not depends on the version of Windows).
One place in R where the difference might be seen is in division by
zero: 1/x
is Inf
or -Inf
depending on the sign of
zero x
.Ops
group generic function. (See
Ops
for how dispatch is computed.)If applied to arrays the result will be an array if this is sensible (for example it will not if the recycling rule has been invoked).
Logical vectors will be coerced to integer or numeric vectors,
FALSE
having value zero and TRUE
having value one.
1 ^ y
and y ^ 0
are 1
, always.
x ^ y
should also give the proper limit result when
either (numeric) argument is infinite (one of Inf
or
-Inf
).
Objects such as arrays or time-series can be operated on this way provided they are conformable.
For double arguments, %%
can be subject to catastrophic loss of
accuracy if x
is much larger than y
, and a warning is
given if this is detected.
%%
and x %/% y
can be used for non-integer y
,
e.g.\ifelse{latex}{\out{~}}{ } 1 %/% 0.2
, but the results are subject to representation
error and so may be platform-dependent. Because the IEC 60059
representation of 0.2
is a binary fraction slightly larger than
0.2
, the answer to 1 %/% 0.2
should be 4
but
most platforms give 5
.
Users are sometimes surprised by the value returned, for example why
(-8)^(1/3)
is NaN
. For double inputs, R makes
use of IEC 60559 arithmetic on all platforms, together with the C
system function pow for the ^
operator. The relevant
standards define the result in many corner cases. In particular, the
result in the example above is mandated by the C99 standard. On many
Unix-alike systems the command man pow
gives details of the
values in a large number of corner cases.
Arithmetic on type double in R is supposed to be done in round to nearest, ties to even mode, but this does depend on the compiler and FPU being set up correctly.
D. Goldberg (1991) What Every Computer Scientist Should Know about Floating-Point Arithmetic ACM Computing Surveys, 23(1). Postscript version available at http://www.validlab.com/goldberg/paper.ps Extended PDF version at http://www.validlab.com/goldberg/paper.pdf
sqrt
for miscellaneous and Special
for special
mathematical functions. Syntax
for operator precedence.
%*%
for matrix multiplication.
x <- -1:12
x + 1
2 * x + 3
x %% 2 #-- is periodic
x %/% 5
Run the code above in your browser using DataLab