Skip to content

PredictiveEcology/fpCompare

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
R
 
 
 
 
 
 
man
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

fpCompare

R build status CRAN_Status_Badge Downloads DOI Codecov test coverage

Reliable comparison of floating point numbers

Comparisons of floating point numbers are problematic due to errors associated with the binary representation of decimal numbers. Computer scientists and programmers are aware of these problems and yet people still use numerical methods which fail to account for floating point errors (this pitfall is the first to be highlighted in Circle 1 of Burns (2012) The R Inferno).

To avoid these and other numerical rounding issues, R's help file for relational operators (e.g., ?'>') suggests using identical and all.equal when making numerical comparisons:

x1 <- 0.5 - 0.3
x2 <- 0.3 - 0.1
x1 == x2                           # FALSE on most machines
identical(all.equal(x1, x2), TRUE) # TRUE everywhere

Inspired by R FAQ 7.31 and this Stack Overflow answer, this package provides new relational operators useful for performing floating point number comparisons with a set tolerance:

fpCompare1 base
%>=% >=
%>>% >
%<=% <=
%<<% <
%==% ==
%!=% !=

These functions use the base relational operators to make comparisons, but incorporate a tolerance value (fpCompare.tolerance) similar to all.equal. The default fpCompare.tolerance value is .Machine$double.eps^0.5, set via options. This is the same default used in all.equal for numeric comparisons.

# set telorance value
tol = .Machine$double.eps^0.5       # default value
options(fpCompare.tolerance = tol)

# perform comparisons
x1 <- 0.5 - 0.3
x2 <- 0.3 - 0.1
x1 == x2         # FALSE on most machines
x1 %==% x2       # TRUE everywhere

Installation

From CRAN

install.packages("fpCompare")

From GitHub

library(devtools)
install_github("PredictiveEcology/fpCompare")

Bug Reports

https://github.com/PredictiveEcology/fpCompare/issues

Footnotes

  1. The %<<% and %>>% symbols are used instead of %<% and %>% to avoid a conflict with magrittr's pipe operator (%>%).

About

Reliable comparison of floating point numbers in R

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages