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