Mixed mode arithmetic - GCC 3.3.3-3 bug?
Richard (Rick) Murphy
rick@glentng.com
Mon Mar 29 23:23:00 GMT 2004
Hi,
I'm really new to this - hope this is the right place to post this:
Can somebody please explain how this program:
main()
{
short DDN;
short FORTYTHOU = 40000;
printf("Integer Subtraction\n");
DDN = FORTYTHOU;
printf("DDN = %d\n", DDN);
DDN = DDN - 10000;
printf("DDN = %d\n", DDN);
printf("Real Subtraction\n");
DDN = FORTYTHOU;
printf("DDN = %d\n", DDN);
DDN = DDN - 10000.0;
printf("DDN = %d\n", DDN);
}
Gives this result with GCC 3.3.3-3 on RH9 (and also with GCC gcc-3.2.2-5):
Integer Subtraction
DDN = -25536
DDN = 30000
Real Subtraction
DDN = -25536
DDN = -32768
Whereas on Solaris9 with Forte 2 Update 6 compiler I get this (which is what
I would expect):
Integer Subtraction
DDN = -25536
DDN = 30000
Real Subtraction
DDN = -25536
DDN = 30000
Is this a bug in GCC or I am not understanding its behaviour properly ?
Thanks.
--Rick Murphy
More information about the Gcc-bugs
mailing list