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} > > > >