Multiplication by a decimal floating-point (DFP) value of one appears to be
"optimized" away, thereby producing the wrong value.  In DFP, the value one has
many representations.  Only one of them (1.DF) results in no change to values
for multiplication; the others change the quantum exponent.

/* DFP TR 24732 == WG14 / N1312 */
#define __STDC_WANT_DEC_FP__ /* Tell implementation that we want Decimal FP */

#include <stdio.h>      /* printf() */
#include <string.h>     /* memcmp() */

int main(void){
  _Decimal32 f1 = 1.0DF;
  _Decimal32 f2 = 2.0DF;
  _Decimal32 f3;

  f3 = f2 * f1;         /* should change quantum exponent */
  if( 0 == memcmp( &f3, &f2, sizeof(f3) ) ){
    (void)printf("Fail 1\n");
  }

  f3 = f2 * 1.0DF;      /* should change quantum exponent */
  if( 0 == memcmp( &f3, &f2, sizeof(f3) ) ){
    (void)printf("Fail 2\n");
  }
  return 0;
}

gets: Fail 2


-- 
           Summary: x * 1.0DF gets wrong value
           Product: gcc
           Version: 4.3.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: tydeman at tybor dot com
 GCC build triplet: 4.3.2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39902

Reply via email to