Re: Help on compiling a function

*To*: mathgroup at smc.vnet.net*Subject*: [mg115648] Re: Help on compiling a function*From*: "Sjoerd C. de Vries" <sjoerd.c.devries at gmail.com>*Date*: Mon, 17 Jan 2011 05:40:02 -0500 (EST)*References*: <iguiqe$8sv$1@smc.vnet.net>

Small error correction in the timing calculations & added parallelization (example4): In[134]:= x0 = Table[ example0[{97.6203, 8.4788, 21.4204, 46.1755 + i}, 1, 1, {39.9342, 7.5820, 5.8656, 10.0553}], {i, 0, 1, 0.00001}] // Timing; x1 = Table[ example1[{97.6203, 8.4788, 21.4204, 46.1755 + i}, 1, 1, {39.9342, 7.5820, 5.8656, 10.0553}], {i, 0, 1, 0.00001}] // Timing; x2 = Table[ example2[{97.6203, 8.4788, 21.4204, 46.1755 + i}, 1, 1, {39.9342, 7.5820, 5.8656, 10.0553}], {i, 0, 1, 0.00001}] // Timing; x3 = Table[ example3[{97.6203, 8.4788, 21.4204, 46.1755 + i}, 1, 1, {39.9342, 7.5820, 5.8656, 10.0553}], {i, 0, 1, 0.00001}] // Timing; x4 = Table[ example4[{97.6203, 8.4788, 21.4204, 46.1755 + i}, 1, 1, {39.9342, 7.5820, 5.8656, 10.0553}], {i, 0, 1, 0.00001}] // Timing; In[146]:= {First[x0]/First[x1], First[x0]/First[x2], First[x0]/First[x3], First[x0]/First[x4]} Out[146]= {0.956921, 7.11966, 7.97129, 8.08738} Cheers -- Sjoerd On Jan 16, 11:55 am, Ramiro <ramiro.barran... at gmail.com> wrote: > Hi everyone, > > I had written about this but wanted to revisit the problem in light of > the latest Mathematica options for compiling (C and parallelization), > which I was hoping to try to use on this function, which is the main > arithmetic and time-consuming part of my simulation. > > I have the following code: > > example1 = > Compile[{{n, _Real, 1}, {a, _Real}, {b, _Real}, {t, _Real, 1}}, > Gamma[Total[n] + a]/(Times @@ (Gamma[n + 1])*Gamma[a])*b^a* > Times @@ (t^n)/(Total[t] + b)^(Total[n] + a)]; > > but under input such as the following it breaks: > > example1[{97.6203, 8.4788, 21.4204, 46.1755}, 1, 1, {39.9342, 7.5820, > 5.8656, 10.0553}] > CompiledFunction::cfse: Compiled expression > 1.33128164105722332870399207`12.920368310128136*^315 should be a > machine-size real number. >> > CompiledFunction::cfex: Could not complete external evaluation at > instruction 4; proceeding with uncompiled evaluation. >> > > the problem is just that in the calculation Gamma ends up being really > big, larger than $MaxMachineNumber so it complains. > > Anybody see a way around this? This is the workhorse function of my > simulation, so any gain in speed helps a lot > > Thanks in advance, > Ramiro > > Longer explanation (if interested): > > example = > Compile[{{n, _Real, 1}, {a, _Real}, {b, _Real}, {t, _Real, 1}}, > Module[{totaln, totalt, gammanp1times, tpowntimes, times1, div1, > times2, times3, pow1, gammatotnpa}, totaln = Total[n]; > totalt = Total[t]; > gammanp1times = Apply[Times, Gamma[n + 1]]; > tpowntimes = Apply[Times, t^n]; > times1 = Times[gammanp1times, Gamma[a]]; > gammatotnpa = Gamma[totaln + a]; > div1 = Divide[gammatotnpa, times1]; > times2 = Times[div1, b^a]; > times3 = Times[times2, tpowntimes]; > pow1 = Power[totalt + b, totaln + a]; > Divide[times3, pow1]] > ] > example[{97.6203, 8.4788, 21.4204, 46.1755}, 1, 1, {39.9342, 7.5820, > 5.8656, 10.0553}] > > the result of gammatotnpa is greater than 10^315 which is greater than > $MaxMachineNumber on my machine. Any suggestions?