Re: How to handle powers in c-code generation?

• To: mathgroup at smc.vnet.net
• Subject: [mg40067] Re: How to handle powers in c-code generation?
• From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
• Date: Tue, 18 Mar 2003 05:49:50 -0500 (EST)
• Organization: Universitaet Leipzig
• References: <b4uarn\$qh5\$1@smc.vnet.net>
• Reply-to: kuska at informatik.uni-leipzig.de
• Sender: owner-wri-mathgroup at wolfram.com

Hi,

a) if C code with pow() is nice or not is a matter of taste
b) you may have a power c-function that handle integer powers
without calling log()
c)
Unprotect[Power]
Format[Power[x_, n_Integer], CForm] :=
HoldForm[Evaluate[Table[x, {n}]]] /. List -> Times

Protect[Power]

does what you want, but it is not nice for x^10-x^9 ..
you should use the Horner rule if you have polynoms.

Regards
Jens

Christian Ott wrote:
>
> Hi there,
>
> I have a problem with generating "nice" c-code in mathematica.
> When I use the packages "Format" and "Optimize" to generate the
> c-code, the (integer) powers are coded as function calls instead of
> explicit
> multiplications (e.g. pow(x,2.) instead of x*x). These function calls
> are obviously quite ineffective in many cases.
>
> Here is a simple example of my problem:
> ----------------
> Mathematica Input:
>   << Format'
>   << Optimize'
>   CAssign[x^2, AssignOptimize -> False, OptimizePower -> Binary]
>
> Mathematica Output: pow(x,2.)
> Desired Output: x*x
> -----------------
>
> I thought that the option "OptimizePower -> Binary" would be
> sufficient to get an output of the form "x*x".
> Is there another option that I should use in the CAssign call?
> Or is there a better way of generating c-code from mathematica?
>
> thanks in advance,
> Christian

• Prev by Date: Re: Increase in efficiency with Module
• Next by Date: Re: FindRoot problem
• Previous by thread: How to handle powers in c-code generation?
• Next by thread: FindRoot problem