optimization bug in g++ 4.3.3

Nikos Chantziaras realnc@arcor.de
Sat Sep 5 01:20:00 GMT 2009


On 09/05/2009 03:05 AM, Ed Boas wrote:
> The following code:
>
> ----------
> #include<stdio.h>
> #include<inttypes.h>
>
> // Rounds in current rounding mode, which is "round to closest
> integer" by default on Pentium&  Xeon
> // Valid for |fval|<= 2^22 - 1, that is, -4194303<= fval<= 4914303
> // based on code from www.lomont.org
> inline int32_t fast_round(float x) {
>   x+=12582912; // 2^23+2^22
>   int32_t i=*(int32_t*)&x;
>   i&=8388607; // 2^23-1;
>   i-=4194304; // 2^22
>   return i;
> }
>
> int main(void) {
>   printf("%f rounds to %i\n", 1.4f, fast_round(1.4f));
>   return 0;
> }
> [...]
> However, when it is compiled with g++ -O2, it prints:
>
> 1.400000 rounds to -4194304
>  [...]

Your code is not correct C++.  Please read:

http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-aliasing.html



More information about the Gcc-help mailing list