[Linux-ia64] gcc type promotion bug?

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

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.

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