Roberto Bagnara ha scritto:
[Thanks to all those who responded to my previous problem-report wrt to the IEEE inexact-flag on the Alpha. We have filed a bug report for that one.]
Hi there,
we keep finding problems on the Alpha, and we are unsure about what is going on. I anticipate that the present problem does not seem to be a compiler issue (except that the -mieee-with-inexact option promises full compliance with the IEEE floating point standard). However, I hope some Alpha expert can advise about how to investigate the issue further.
Here are the details:
$ cat bug.c #include <stdio.h>
float f = 1.4e-45; double d = 1e-300;
int main() { if (1.4e-45f > 1e-300) printf("compile-time test says 1.4e-45f > 1e-300\n"); if (f < d) printf(" run-time test says 1.4e-45f < 1e-300\n"); return 0; }
The problem come from the fact that for astonishing reasons 1.4e-45f is not seen as 1.4e-45. So, adding printf("%g\n", f); before return 0; we get $ ./a.out compile-time test says 1.4e-45f > 1e-300 run-time test says 1.4e-45f < 1e-300 2.65249e-315 Note that 2.65249e-315 is not representable in ieee754/iec559 32 bit floating point. 32 bit floats are emulated on Alpha? There is an huge bug in FP emulation? -- Abramo Bagnara Opera Unica Phone: +39.0546.656023 Via Borghesi, 16 48014 Castel Bolognese (RA) - Italy