[Linux-ia64] gcc type promotion bug?

From: Richard Hirst <rhirst_at_linuxcare.com>
Date: 2002-04-17 06:00:09
#include <stdio.h>

int
main(int argc, char **argv)
{
        long a = 0x70000037L;
        float f = 0.01;
        long b = a + 1L/f;

        printf("%lx, %lx\n", b, a + 100L);
        return 0;
}



In the above, 1/f = 100, so the two numbers printed out should be the
same.  For me it prints out "70000080, 7000009b".  Same for gcc 2.96
and 3.0.3.

By trying various numbers for 'a', it appears to me that it is demoting
'a' to a float when evaluating 'b', thus truncating it to 24 significant
bits.  I thought all mixed mode arithmetic was supposed to be promoted
to doubles for evaluation.  This is breaking parted 1.6 on ia64.

Richard
Received on Tue Apr 16 13:18:33 2002

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:08 EST