pow function working unexpectedly
Nicolas Blais
nb_root at videotron.ca
Tue Apr 11 23:35:16 UTC 2006
On Tuesday 11 April 2006 19:24, Colin Percival wrote:
> Andy Reitz wrote:
> > So, clearly, something is optimizing the pow() function away when the
> > arguments are hard-coded lvalues, instead of varibles.
> >
> > Now, what that thing *is*, I don't know.
>
> The C compiler precomputes constant expressions; your "pow(2,3)" is
> being rewritten to "8" by the compiler. Similarly, if you write
> "1 + 2 / 3 + 4 * 5 - 6", the C compiler will turn this into "15"
> rather than producing a series of instructions which computes the
> expression.
>
> When you reference variables, this optimization isn't possible, since
> those variables might be modified before you reach the line where
> they are used. (Obviously this doesn't happen in your program, but
> the compiler isn't smart enough to figure that out.)
>
> Colin Percival
+1. The compiler sees constants differently from variables (which reside in a
memory space). With the constant, the optimizer can rewrite the equation with
its answer.
Anyhow, it can't be seen as a bug because you should include the math library
whenever you're using a function from it (see man pow). Therefore, if you
would have included the library in the first place, you would have never
found this 'oddity'.
Nicolas.
--
FreeBSD 7.0-CURRENT #1: Sat Apr 8 21:33:25 EDT 2006
root at clk01a:/usr/obj/usr/src/sys/CLK01A
PGP? : http://www.clkroot.net/security/nb_root.asc
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-questions/attachments/20060411/2806f075/attachment.pgp
More information about the freebsd-questions
mailing list