------- Comment #3 from chat95 at mac dot com 2007-03-01 08:06 ------- 1. // long double PI * PI + IP ld_a = ld_b = PI; part becomes: movl $560513024, %eax movl $-921707870, %edx movl $16384, %ecx This number is equivalent to: 0x4000c90fdaa22168c000 and we can write down as floating point number as: 2^(16384-16383) * 1.100100100001111 1101101010100010 0010000101101000 11000000000000 (B)
2.// double PI * PI + IP d_a = d_b = PI; part becomes: movl $1413754136, %eax movl $1074340347, %edx this number is equivalent to: 0x400921fb54442d18, and corresponding floating number is: 2^(1024-1023)* 1.1001001000011111101101010100010001000010110100011000(B) . when we compare these significants of these two numbers: 1.100100100001111 1101101010100010 0010000101101000 11000(B) 1.100100100001111 1101101010100010 0010000101101000 11000 000000000 (B) so - what we can say from here is: #define PI 3.14...L is read as double for long double number with 0 filled lowest 16bits. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31006