Hi, I'm sure that this question has come up many times before. When I load an R extension dll I've built with the Microsoft compiler, I get the warning: Warning message: DLL attempted to change FPU control word from 8001f to 9001f So, what I did to try to fix the problem (to my knowledge, Microsoft will not support compile time switching of floating point control until version 8.0 of their compiler - see: http://blogs.msdn.com/ericflee) was to place the following statement inside R_init_mylib: _controlfp(_MCW_PC, _PC_64); // use extended precision for operations in x87 FPU This didn't fix my problem. I ended up sprinkling these liberally throughout my code, but that didn't help. One thing I do like about the Microsoft compiler is the debugging facility. But, I'll definitely switch to gcc if this is necessary to get rid of the problem. Thanks, Chris Paulse [[alternative HTML version deleted]]
We recommend calling Rwin_fpset() which is exported by R.dll and is known to do the trick. As it contains _controlfp(_PC_64, _MCW_PC); it may be that the args you used are incorrect (and I am not on Windows to check the docs, but note that is the form used in the URL you cite). On Mon, 29 Aug 2005, Chris Paulse wrote:> Hi, > > I'm sure that this question has come up many times before. When I load an R > extension dll I've built with the Microsoft compiler, I get the warning:> Warning message: > > DLL attempted to change FPU control word from 8001f to 9001f > > So, what I did to try to fix the problem (to my knowledge, Microsoft will > not support compile time switching of floating point control until version > 8.0 of their compiler - see: http://blogs.msdn.com/ericflee) was to place > the following statement inside R_init_mylib:> _controlfp(_MCW_PC, _PC_64); // use extended precision for operations in x87 > FPU > > This didn't fix my problem. I ended up sprinkling these liberally > throughout my code, but that didn't help. One thing I do like about the > Microsoft compiler is the debugging facility. But, I'll definitely switch > to gcc if this is necessary to get rid of the problem.-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
Chris Paulse <cpaulse at aecom.yu.edu> wrote:> Hi,> I'm sure that this question has come up many times before. When I load an R > extension dll I've built with the Microsoft compiler, I get the warning:> Warning message:> DLL attempted to change FPU control word from 8001f to 9001fI think maybe most parsimonious/simple fix for this problem is to add "fp10.obj" to the link line for your code. This file is provided by Microsoft to flip the precision of the run time library to 80 bits. The linker should find it automatically. http://msdn.microsoft.com/library/en-us/vclib/html/_crt_floating.2d.point_support.asp -- David Hinds