IBM Support

IZ88082: FP MULTIPLY SUBTRACT ROUNDING ISSUE

Fixes are available

January 2011 PTF for XL C/C++ for AIX, V11.1
May 2011 PTF for XL C for AIX, V11.1
May 2011 PTF for XL C/C++ for AIX, V11.1
August 2011 PTF for XL C/C++ for AIX, V11.1
November 2011 PTF for XL C/C++ for AIX, V11.1
January 2012 PTF for XL C for AIX, V11.1
January 2012 PTF for XL C/C++ for AIX, V11.1
April 2012 PTF for XL C for AIX, V11.1
April 2012 PTF for XL C/C++ for AIX, V11.1
July 2012 PTF for XL C/C++ for AIX, V11.1
October 2012 PTF for XL C for AIX, V11.1
October 2012 PTF for XL C/C++ for AIX, V11.1
February 2013 PTF for XL C for AIX, V11.1
February 2013 PTF for XL C/C++ for AIX, V11.1
XL C/C++ for AIX Fix Pack 14 (May 2013 PTF) for 11.1
XL C for AIX Fix Pack 14 (May 2013 PTF) for 11.1
XL C/C++ for AIX Fix Pack 15 (August 2013 PTF) for 11.1
XL C for AIX Fix Pack 15 (August 2013 PTF) for 11.1
XL C/C++ for AIX Fix Pack 16 (November 2013 PTF) for 11.1
XL C for AIX Fix Pack 17 (February 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 17 (February 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 18 (May 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 19 (August 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 20 (November 2014 PTF) for 11.1
XL C for AIX Fix Pack 21 (April 2015 PTF) for 11.1
XL C/C++ for AIX Fix Pack 21 (April 2015 PTF) for 11.1
XL C/C++ for AIX Fix Pack 22 (September 2015 PTF) for 11.1
XL C for AIX Fix Pack 23 (March 2016 PTF) for 11.1
XL C/C++ for AIX Fix Pack 23 (March 2016 PTF) for 11.1
XL C for AIX Fix Pack 24 (September 2016 PTF) for 11.1
XL C/C++ for AIX Fix Pack 24 (September 2016 PTF) for 11.1
January 2011 PTF for XL C for AIX, V11.1
August 2011 PTF for XL C for AIX, V11.1
November 2011 PTF for XL C for AIX, V11.1
July 2012 PTF for XL C for AIX, V11.1
XL C for AIX Fix Pack 16 (November 2013 PTF) for 11.1
XL C for AIX Fix Pack 18 (May 2014 PTF) for 11.1
XL C for AIX Fix Pack 19 (August 2014 PTF) for 11.1
XL C for AIX Fix Pack 20 (November 2014 PTF) for 11.1
XL C for AIX Fix Pack 22 (September 2015 PTF) for 11.1

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • ****************************************************************
    * Floating point expressions of the form:                      *
    *                                                              *
    *     a - b * c                                                *
    *     -(a - b * c)                                             *
    *                                                              *
    * are returning results that differ by a small margin in the   *
    * least significant digit, as compared to results from other   *
    * versions and releases of the XL compilers.                   *
    ****************************************************************
    

Local fix

  • ****************************************************************
    * Applications compiled with affected compiler versions and a  *
    * minimum optimization level of -O2 can workaround the issue   *
    * by adding the compile option -qstrict=noieeefp.              *
    ****************************************************************
    

Problem summary

  • ****************************************************************
    *USERS AFFECTED:                                               *
    * Those compiling applications that use floating point         *
    * arithmetic in the form outlined in the error description.    *
    * Affected compiler versions are XL C/C++ for AIX, V11.1.0.0 - *
    * V11.1.0.3 and XL Fortran V13.1.0.0 - V13.1.0.3.              *
    ****************************************************************
    *PROBLEM DESCRIPTION:                                          *
    * The result difference was caused by a change to the          *
    * instructions generated by the compiler for calculations of   *
    * the form ' a - b * c '.  Generated code utilizes fmul and    *
    * fsub instructions instead of the single fused                *
    * multiply/subtract fnmsub instruction, which was used in      *
    * other compiler versions.                                     *
    *                                                              *
    * Depending on the input values, the rounding difference       *
    * between these two instruction sequences can sometimes lead   *
    * to small differences in the least significant digit of the   *
    * result.  The difference is within standard rounding          *
    * tolerances, however code that has a strict reliance on the   *
    * presence of the fnmsub instruction and it's rounding         *
    * properties may be affected in more significant ways.         *
    ****************************************************************
    *RECOMMENDATION:                                               *
    * The issue was corrected via APAR in the XLC V11.1.0.4 PTF    *
    * (IZ88082) and XLF V13.1.0.4 PTF (IZ91502).  It is            *
    * recommended to use the latest PTF release of the compiler.   *
    ****************************************************************
    

Problem conclusion

  • ****************************************************************
    * The compiler code generation was reverted back to use the    *
    * fnmsub instruction by default, effectively restoring the     *
    * previous rounding behaviour.                                 *
    ****************************************************************
    

Temporary fix

Comments

APAR Information

  • APAR number

    IZ88082

  • Reported component name

    XL C/C++ AIX

  • Reported component ID

    5724X1300

  • Reported release

    B10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2010-11-02

  • Closed date

    2015-01-07

  • Last modified date

    2015-01-07

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

    IZ91502 LI76141

Fix information

  • Fixed component name

    XL C FOR AIX

  • Fixed component ID

    5724X1200

Applicable component levels

  • RB10 PSY

       UP

[{"Line of Business":{"code":"LOB57","label":"Power"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSGH2K","label":"XL C for AIX"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"11.1"}]

Document Information

Modified date:
06 October 2021