[Rd] precision when calling a C function; presence of Fortran call
murdoch at stats.uwo.ca
Tue Dec 19 22:24:42 CET 2006
On 12/19/2006 4:16 PM, Benjamin Tyner wrote:
> Thanks; I'm on 32-bit linux, but it's good to know the behavior on
> Windows. Do you know a way to force "floor" to use this reduced precision?
Force the value to be stored to a "double" and it will get the reduced
precision. You can do this by assigning it to a numeric variable in R
and then passing it back; you can presumably do it by some trickery in
your compiler, but watch out for optimizations that leave it in an 80
bit register the whole time.
> Duncan Murdoch wrote:
>> On Windows, it's fairly common for runtime libraries to switch the
>> precision from 80 bit to 64 bit. R on Windows tries to guard against
>> this, and on your test package, I get
>> when f computed by R, C says 40 by itself
>> when f computed by R, C says 40, Fortran says 40
>> when f computed by C, C says 40 by itself
>> when f computed by C, C says 40, Fortran says 40
>> It's possible that the floating point change is happening on your
>> platform, or happened before you even got to this call.
>> Here's code that works in Windows to detect such a change across a
>> LoadLibrary call:
>> rcw = _controlfp(0,0) & ~_MCW_IC; /* Infinity control is ignored */
>> tdlh = LoadLibrary(path);
>> dllcw = _controlfp(0,0) & ~_MCW_IC;
>> No idea if _controlfp() exists on your system.
>> Duncan Murdoch
More information about the R-devel