Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Question: Compile in Mathematica 8.0

  • To: mathgroup at smc.vnet.net
  • Subject: [mg114676] Re: Question: Compile in Mathematica 8.0
  • From: "Vivek J. Joshi" <vivekj at wolfram.com>
  • Date: Sun, 12 Dec 2010 05:46:57 -0500 (EST)

Compile is doing something strange for the second expression v1. You can investigate this using CompilePrint, either way I have reported this issue to the developers. For now using Round on the expression to compute len works as expected.

v1==Compile[{{n,_Integer}},Module[{g,len},len==Round[n*(n-1)/2];
g==RandomVariate[NormalDistribution[0.,1.],len]]]
CompiledFunction[{n},Module[{g,len},len==Round[1/2 n (n-1)];g==RandomVariate[NormalDistribution[0.,1.],len]],-CompiledCode-]

v1[3]
{0.94936,-0.205418,1.34942}

Vivek J. Joshi

On Dec 11, 2010, at 12:52 AM, Asim wrote:

> Hi
>
> I am not sure why the first function named v works and why the second
> function named v1 does not compile. The only difference between the
> two functions is in the variable called len which controls the number
> of random numbers that are generated.
>
> I am using Mathematica 8.0 on Windows Vista machine.
>
> Thanks
>
> Asim
>
>
>
> First function:
>
>
> v == Compile[{{n, _Integer}},
>  Module[
>   {g, len},
>   len == n*(n - 1);
>   g == RandomVariate[NormalDistribution[0., 1.], len]
>   ]
>  ]
>
> Output is
>
> CompiledFunction[{n},Module[{g,len},len==n
> (n-1);g==RandomVariate[NormalDistribution[0.,1.],len]],-CompiledCode-]
>
> v[3]
>
> {0.0866864,-0.271121,-0.431317,-0.6787,-1.29246,0.550486}
>
> Second Function:
>
> v1 == Compile[{{n, _Integer}},
>  Module[
>   {g, len},
>   len == n*(n - 1)/2;
>   g == RandomVariate[NormalDistribution[0., 1.], len]
>   ]
>  ]
>
> CompiledFunction[{n},Module[{g,len},len==1/2 n
> (n-1);g==RandomVariate[NormalDistribution[0.,1.],len]],-CompiledCode-]
>
> v1[3]
>
> During evaluation of In[42]:== CompiledFunction::cfse: Compiled
> expression {-0.325949,1.72381,0.368231} should be a machine-size
> integer. >>
>
> During evaluation of In[42]:== CompiledFunction::cfex: Could not
> complete external evaluation at instruction 8; proceeding with
> uncompiled evaluation. >>
>
> Out[42]== {0.295626, 0.664446, 0.654626}
>
>
>
>


  • Prev by Date: Re: Replacement Rule with Sqrt in denominator. Also Bug in Series; see Semantica / Harris solution
  • Next by Date: Re: Using a Correlation Matrix to reduce risk Options
  • Previous by thread: Re: Question: Compile in Mathematica 8.0
  • Next by thread: Re: Question: Compile in Mathematica 8.0