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:

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:

fpCompare[^1] 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.

Installation

From CRAN

install.packages("fpCompare")

From GitHub

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