So that might be a known errata? The following program should yield
1.4013e-45 twice (the bug might show up only at -mieee -O0, I don't know).
float x = 1.0;
double y;
int g(float z)
{
printf ("%g\n", z);
}
Well, AFAICS this is an error; %g refers to a double, and you're passing a
float, so that output would be undefined.
No, floats are always promoted to doubles in unprototyped function or as
part of variadic parameters.
But regardless of whether I add a (double) cast here, and regardless of
whether I use -mieee (which should still be the default now on Debian's
gcc), if I build with -O2, I get 2.65249e-315 printed out twice. If I build
with -O0 I instead get
2.65249e-315
0
This was what I expected. The right value is 2^-149, that is
1.4013e-45, but the alpha does not do it. The architecture handbook
says "A trap handler can convert an S_ floating denormal value into the
corresponding T_ floating finite value by adding 896 to the exponent and
normalizing", but here 896 is not added and I get a denormal double,
2.65249e-315.
Actually both compiled programs are correct. You get a zero if the
denormal is casted back to float (which makes a zero, because it is way
off the range of a float); you get 2.65249e-315 if the compiler performs
some copy propagation and sees through the conversion (because if it was
not for the errata, the two values should indeed have been equal).
Beyond that, I haven't looked closely at the math you're doing to verify
that the alpha is getting it wrong, but I can confirm that this problem is
consistently reproducible and isn't tied to math-emu.
Thanks, I've XFAILed the test upstream and the maintainer of the Debian
package will upload a new version in the next week.
Paolo
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]