From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Wragg To: help-gcc@gnu.org Subject: Re: What the hell is going on? Just a simple division... Date: Fri, 31 Dec 1999 22:24:00 -0000 Message-ID: References: <83oqfc$2q4$1@dinkel.civ.utwente.nl> X-SW-Source: 1999-12n/msg00342.html Message-ID: <19991231222400.nwDFYmlBCTWmpUENLVNnD0HvfqOinN2_j-aXlxwiAT0@z> "Paul E.C. Melis" writes: > Using gcc-2.95.2 and linux 2.0.35 (libc5) the > following program gives as output > 0 > 1 > instead of the obviously correct output > 1 > 1 > Is this a compiler bug? No. Just a pitfall of floating point on x86. > printf ("%d\n", (int) ( log(2.0) / log(2.0) )); Look at the generated assembly. One "log(2.0)" gets evaluated to a double held in an 80-bit FP register. This is then transfered to a 64-bit double in memory, causing it to be rounded. The other "log(2.0)" is then evaluated to a double held in an 80-bit bit FP register. The division is then performed. Since only one value was rounded, the result will not be 1.0, and so on conversion to int may be truncated to 0. David Wragg