[R] Inverse of FAQ 7.31.
Rolf Turner
rolf.turner at xtra.co.nz
Tue Aug 2 08:02:47 CEST 2011
Why does R think these numbers ***are*** equal?
In a somewhat bizarre set of circumstances I calculated
x0 <- 0.03580067
x1 <- 0.03474075
y0 <- 0.4918823
y1 <- 0.4474461
dx <- x1 - x0
dy <- y1 - y0
xx <- (x0 + x1)/2
yy <- (y0 + y1)/2
chk <- yy*dx - xx*dy + x0*dy - y0*dx
If you think about it ***very*** carefully ( :-) ) you'll see that
``chk'' ought to be zero.
Blow me down, R gets 0. Exactly. To as many significant digits/decimal
places
as I can get it to print out.
But .... I wrote a wee function in C to do the *same* calculation and
dyn.load()-ed
it and called it with .C(). And I got -1.248844e-19.
This is of course zero, to all floating point arithmetic intents and
purposes. But if
I name the result returned by my call to .C() ``xxx'' and ask
xxx >= 0
I get FALSE whereas ``chk >= 0'' returns TRUE (as does ``chk <= 0'', of
course).
(And inside my C function, the comparison ``xxx >= 0'' yields ``false''
as well.)
I was vaguely thinking that raw R arithmetic would be equivalent to C
arithmetic.
(Isn't R written in C?)
Can someone explain to me how it is that R (magically) gets it exactly
right, whereas
a call to .C() gives the sort of ``approximately right'' answer that one
might usually
expect? I know that R Core is ***good*** but even they can't make C do
infinite
precision arithmetic. :-)
This is really just idle curiosity --- I realize that this phenomenon is
one that I'll simply have
to live with. But if I can get some deeper insight as to why it occurs,
well, that would
be nice.
cheers,
Rolf Turner
More information about the R-help
mailing list