Type: | Package |
Title: | Reliable Comparison of Floating Point Numbers |
URL: | https://github.com/PredictiveEcology/fpCompare |
Version: | 0.2.4 |
Date: | 2022-08-13 |
Description: | Comparisons of floating point numbers are problematic due to errors associated with the binary representation of decimal numbers. Despite being aware of these problems, people still use numerical methods that fail to account for these and other rounding errors (this pitfall is the first to be highlighted in Circle 1 of Burns (2012) 'The R Inferno' https://www.burns-stat.com/pages/Tutor/R_inferno.pdf). This package provides new relational operators useful for performing floating point number comparisons with a set tolerance. |
Depends: | R (≥ 3.4) |
Suggests: | covr, knitr, rmarkdown, testthat |
Encoding: | UTF-8 |
Language: | en-CA |
License: | GPL-3 |
VignetteBuilder: | knitr |
ByteCompile: | yes |
BugReports: | https://github.com/PredictiveEcology/fpCompare/issues |
RoxygenNote: | 7.2.1 |
NeedsCompilation: | no |
Packaged: | 2022-08-13 20:06:57 UTC; achubaty |
Author: | Alex M Chubaty |
Maintainer: | Alex M Chubaty <achubaty@for-cast.ca> |
Repository: | CRAN |
Date/Publication: | 2022-08-15 07:30:11 UTC |
Relational operators with tolerance
Description
Binary operators which allow the comparison of values in numeric vectors.
Usage
x %>=% y
x %>>% y
x %<=% y
x %<<% y
x %==% y
x %!=% y
Arguments
x |
Any numeric object. |
y |
Any numeric object. |
Details
These are similar to their counterparts in base
, except a tolerance
fpCompare.tolerance
can be specified via options
to account
for floating point rounding errors:
fpCompare | base |
---------------- | ----------- |
%>=% | >= |
%>>% | > |
%<=% | <= |
%<<% | < |
%==% | == |
%!=% | != |
Inspired by R FAQ 7.31 (https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f) and this post (https://stackoverflow.com/a/2769618/1380598).
Value
A logical vector indicating the result of the element by element comparison. The elements of shorter vectors are recycled as necessary.
Author(s)
Alex Chubaty
See Also
Examples
x1 <- 0.5 - 0.3
x2 <- 0.3 - 0.1
x1 == x2 # FALSE on most machines
x1 %==% x2 # TRUE everywhere
identical(all.equal(x1, x2), TRUE) # TRUE everywhere
set.seed(123)
a <- 1:6
b <- jitter(1:6, 1e-7)
print(rbind(a, b), digits = 16)
b %<=% a
b %<<% a
b %>=% a
b %>>% a
b %==% a
b %!=% a