Hi
I have several methods for evaluating a function. The methods are
algebraically
identical but use different numerical techniques. The different methods
work
better (converge faster, etc) in different parts of the function's
domain.
I am compiling a test suite for a package, and would like to verify
that the
different methods return approximately identical results.
Toy example follows:
R> f1 <- function(x){ (x-1)*(x+1)}
R> f2 <- function(x){x^2-1}
R> x <- pi+100i
R> abs(f1(x) - f2(x))
[1] 9.298027e-12
R> stopifnot(abs(f1(x)-f2(x)) < 1e-11)
Observe that f1() should be identically equal to f2(); any differences
are due to
rounding errors (needless to say, the real examples are more complex,
with
larger errors).
My question is, I am unhappy about the numerical value of the tolerance
used in the last line.
The tolerance should be as small as possible, but If I make it too
small, the test may fail
when executed on a machine with different architecture from mine.
How do I deal with this?
--
Robin Hankin
Uncertainty Analyst
Southampton Oceanography Centre
European Way, Southampton SO14 3ZH, UK
tel 023-8059-7743
Robin Hankin wrote:> Hi > > I have several methods for evaluating a function. The methods are > algebraically > identical but use different numerical techniques. The different methods > work > better (converge faster, etc) in different parts of the function's domain. > > I am compiling a test suite for a package, and would like to verify that > the > different methods return approximately identical results. > > Toy example follows: > > > R> f1 <- function(x){ (x-1)*(x+1)} > R> f2 <- function(x){x^2-1} > R> x <- pi+100i > R> abs(f1(x) - f2(x)) > [1] 9.298027e-12 > R> stopifnot(abs(f1(x)-f2(x)) < 1e-11) > > Observe that f1() should be identically equal to f2(); any differences > are due to > rounding errors (needless to say, the real examples are more complex, with > larger errors). > > My question is, I am unhappy about the numerical value of the tolerance > used in the last line. > The tolerance should be as small as possible, but If I make it too > small, the test may fail > when executed on a machine with different architecture from mine. > > How do I deal with this?See ?all.equal Uwe Ligges> > > -- > Robin Hankin > Uncertainty Analyst > Southampton Oceanography Centre > European Way, Southampton SO14 3ZH, UK > tel 023-8059-7743 > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html