Re: Question on Compile[]

• To: mathgroup at smc.vnet.net
• Subject: [mg49779] Re: [mg49747] Question on Compile[]
• From: Sseziwa Mukasa <mukasa at jeol.com>
• Date: Sat, 31 Jul 2004 03:13:59 -0400 (EDT)
• References: <200407301002.GAA26336@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```On Jul 30, 2004, at 6:02 AM, Mark Coleman wrote:

> GThe
> computation is quite simple, Let
>
> cashFlow be a list of real numbers of length n and let nvec=Range[n],
> then the discounted cash flow is the sum over i=1,n of
>
> cashFlow(i)/(1+r)^i
>
> where r is a real number with 0 < r < 1.
>
> The final Mathematica code is:
>
>
> Clear[dcf];
> dcf[cashFlow_, rate_] := Module[{nvec = Range[Length[cashFlow]]},
>      Total[cashFlow/(1.0 + rate)^nvec]
>      ]
>
>
> On my 800 Mhz Powerbook G4, 5000 trials of this takes 3.72 seconds,
> while the compiled version takes 4.2 seconds.
>
> Any ideas how I can speed this up, to get the usual gains one typically
> sees in compiled code?

You can get a slight improvement by not explicitly creating a temporary
variable which removes the need for the Module expression as well:

dcf[cashFlow_, rate_] :=
Total[cashFlow/(1.0 + rate)^Range[Length[cashFlow]]]

My guess is that this is the fastest possible expression.  From the
information in the Help Browser Compile has to do some extra checks at
run time about whether a statement can be done numerically or not.  The
expression itself is very efficient and should result in a very small
piece of machine code which operates optimally.  Any extra work
therefore, such as any overhead introduced by Compile will only slow it
down.  That's my guess anyway.

Regards,

Ssezi

```

• Prev by Date: Re: uniquely change curve colors and make them darker
• Next by Date: Re: Question about composing a complex function.
• Previous by thread: Question on Compile[]
• Next by thread: Re: Question on Compile[]