Skip to content
Prev 48951 / 63424 Next

ggplot2/plyr interaction with latest R-devel?

On 02/09/2014 12:43, peter dalgaard wrote:
I suspect PD knows (or has known) why, but for the sake of those who are 
not much bitten by ix86 compilers ....

It's the curse of extended-precision arithmetic (and not enough 
registers).  It does

compute in an FPU register, then store z1 = R_log(x)
compute z2 = R_log(base) in the FPU
load z1 to an FPU register.
compute z1/z2

(at least at -O2 with the version of gcc whose assembler output I looked 
at).  So z1 is has a 64-bit mantissa and z2 a 53-bit one.

x86_64 has more registers, and so avoids the store.  This can be 
circumvented on i686 by compiling with -msse2, which for some reason 
Linux distros do not make the default.

floor(log2(x)/3) is more reliable (and this is the underlying reason why 
we have log10 and log2).