On Mon, Nov 30, 2015 at 11:09 PM, Nicolas George <geo...@nsup.org> wrote: > Le decadi 10 frimaire, an CCXXIV, Muhammad Faiz a écrit : >> double basefreq = BASEFREQ, endfreq = ENDFREQ; >> if (basefreq == BASEFREQ && endfreq == ENDFREQ) >> printf("equal\n"); >> else >> printf("inequal\n"); >> >> I try with gcc -std=c89 / -std=c99 on mingw 32-bit >> the result is inequal. > > That looks like a compiler bug. Could you post the generated assembly code, > with and without the cast? (and with just one comparison, no need to make > things complicated)
#include <stdio.h> #define BASEFREQ 20.01523126408007475 double basefreq = BASEFREQ; int main(int argc, char** argv) { if (basefreq == BASEFREQ) printf("equal\n"); else printf("inequal\n"); return 0; } gcc -c -std=c89 -O2 without cast: 00000000 <_main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: 83 ec 10 sub $0x10,%esp 9: e8 00 00 00 00 call e <_main+0xe> e: dd 05 00 00 00 00 fldl 0x0 14: db 2d 10 00 00 00 fldt 0x10 1a: d9 c9 fxch %st(1) 1c: df e9 fucomip %st(1),%st 1e: dd d8 fstp %st(0) 20: 7a 02 jp 24 <_main+0x24> 22: 74 10 je 34 <_main+0x34> 24: c7 04 24 06 00 00 00 movl $0x6,(%esp) 2b: e8 00 00 00 00 call 30 <_main+0x30> 30: 31 c0 xor %eax,%eax 32: c9 leave 33: c3 ret 34: c7 04 24 00 00 00 00 movl $0x0,(%esp) 3b: e8 00 00 00 00 call 40 <_main+0x40> 40: eb ee jmp 30 <_main+0x30> with cast: 00000000 <_main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: 83 ec 10 sub $0x10,%esp 9: e8 00 00 00 00 call e <_main+0xe> e: dd 05 00 00 00 00 fldl 0x0 14: dd 05 10 00 00 00 fldl 0x10 1a: d9 c9 fxch %st(1) 1c: df e9 fucomip %st(1),%st 1e: dd d8 fstp %st(0) 20: 7a 02 jp 24 <_main+0x24> 22: 74 10 je 34 <_main+0x34> 24: c7 04 24 06 00 00 00 movl $0x6,(%esp) 2b: e8 00 00 00 00 call 30 <_main+0x30> 30: 31 c0 xor %eax,%eax 32: c9 leave 33: c3 ret 34: c7 04 24 00 00 00 00 movl $0x0,(%esp) 3b: e8 00 00 00 00 call 40 <_main+0x40> 40: eb ee jmp 30 <_main+0x30> without cast with -std=gnu89: 00000000 <_main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: 83 ec 10 sub $0x10,%esp 9: e8 00 00 00 00 call e <_main+0xe> e: dd 05 00 00 00 00 fldl 0x0 14: dd 05 10 00 00 00 fldl 0x10 1a: d9 c9 fxch %st(1) 1c: df e9 fucomip %st(1),%st 1e: dd d8 fstp %st(0) 20: 7a 02 jp 24 <_main+0x24> 22: 74 10 je 34 <_main+0x34> 24: c7 04 24 06 00 00 00 movl $0x6,(%esp) 2b: e8 00 00 00 00 call 30 <_main+0x30> 30: 31 c0 xor %eax,%eax 32: c9 leave 33: c3 ret 34: c7 04 24 00 00 00 00 movl $0x0,(%esp) 3b: e8 00 00 00 00 call 40 <_main+0x40> 40: eb ee jmp 30 <_main+0x30> without cast and use -std=c89, gcc uses fldt instead of fldl _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel