QERFC may return incorrect results if floating-point exceptions are unmasked

Reference Number : dpd200178477

Version : Intel® Fortran Compiler Versions 12, 13, 14, 15 and 16.

Operating System : Windows*, Linux*, OS X*,  32 bit versions only.

Problem Description : For certain values of the argument, the result of a call to QERFC, the REAL(16) version of the complementary error function ERFC, can be influenced by a floating-point exception that occurred during a preceding call, resulting in the return of an inaccurate or incorrect result. This behavior occurs only when floating-point exceptions have been unmasked, for example by compiling the main routine with /fpe:0 (Windows*) or -fpe0 (Linux* or OS X*), or by a call to IEEE_SET_HALTING_MODE.  The issue does not occur on 64 bit operating systems. It does not occur for single or double precision versions of ERFC.

Status : There are no plans to change this behavior.

Workaround :   Either:

Ensure that floating-point exceptions are masked when calling a REAL(16) function such as QERFC or the generic equivalent ERFC with a REAL(16) argument. Floating-point exceptions are masked by default in the Intel compiler at all optimization levels.

                          or

Before calling a REAL(16) function such as QERFC or the generic equivalent ERFC with a REAL(16) argument, clear the floating-point status word to ensure that any exception flag caused by an earlier floating-point exception does not remain set. This can be done by a call to the compiler run-time library routine CLEARSTATUSFPQQ()  described in the Intel Fortran Compiler User and Reference Guide.

 

For more complete information about compiler optimizations, see our Optimization Notice.