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