Following code produces wrong results: #include <stdio.h>
float f = -1.0f ; int main( void ) { if ( (unsigned int)f != (unsigned int)-1.0f ) { printf( "%-12s %04d:NG...[%u]--->[%u]\n", __FILE__, __LINE__, (unsigned int)-1.0f, (unsigned int)f ) ; } else { printf( "[%u]--->[%u] :OK\n", (unsigned int)-1.0f, (unsigned int)f ) ; } return( 0 ) ; } [EMAIL PROTECTED] tmp]$ /home/dinar/work/gcc-builds/gnu/gcc-i686-pc-linux-gnu/bin/gcc sample.c -o sample [EMAIL PROTECTED] tmp]$ ./sample sample.c 0010:NG...[0]--->[4294967295] [EMAIL PROTECTED] tmp]$ /home/dinar/work/gcc-builds/gnu/gcc-i686-pc-linux-gnu/bin/gcc -v Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../configure --prefix=/home/dinar/work/gcc-builds/gnu/gcc-i686-pc-linux-gnu/ --enable-languages=c,c++ Thread model: posix gcc version 4.1.0 20050429 (experimental) -- Summary: wrong result of 'if' statement with comparing of floating point with gcc. Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dtemirbulatov at ru dot mvista dot com CC: dtemirbulatov at ru dot mvista dot com,gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21360