Why not use the full accuracy of Intel Floating-point hardware?
The disadvantage of this is that it is less portable, but may give higher accuracy under certain conditions, but varying with compiler and compiler optimisation and other options. For the Intel X86/Pentium extended precision significand is 64-bit, double is only 53-bit, and memory values are always 53-bit (plus sign and exponent to total 64 bits). (See www.intel.com 27064004.pdf for 80C187 80-bit Math Coprocessor datasheet). One method of ensuring that the IEEE extended double precision floating-point (typically the Intel X86/Pentium) is not used is to alter the appropriate bit in the processor “control word”. This can only be done in assembler. See X86ControlWord.cpp for an example. C99 promises to provide a portable way of setting the precision. The default value of the code word bit is NOT extended for Microsoft Windows, but IS extended for gcc/Linux. The third way to fix the problem is to ‘force’ all intermediate floating point results into memory. This is not an ‘ideal’ fix, since