MathGroup Archive 2005

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

Search the Archive

Re: Nested iterators in Compile

  • To: mathgroup at
  • Subject: [mg55053] Re: [mg55010] Nested iterators in Compile
  • From: "Wolf, Hartmut" <Hartmut.Wolf at>
  • Date: Thu, 10 Mar 2005 05:25:20 -0500 (EST)
  • Sender: owner-wri-mathgroup at

>-----Original Message-----
>From: Maxim [mailto:ab_def at] 
To: mathgroup at
>Sent: Wednesday, March 09, 2005 12:35 PM
>To: mathgroup at
>Subject: [mg55053] [mg55010] Nested iterators in Compile
>The fact that iterators work differently when used in Compile 
>seems to  
>lead to a serious limitation:
>   Module[{s = 0},
>     Do[s += j, {i, n}, {j, i}];
>     s
>CompiledFunction::cfse: Compiled expression i should be a 
>real number.
>CompiledFunction::cfex: External evaluation error at instruction 4;  
>proceeding with uncompiled evaluation.
>The iterator {j, i} is evaluated before any value is assigned 
>to i, and  
>the evaluation of the compiled code fails (and if we add the  
>initialization i=0 before Do, we'll only get an empty loop as 
>the result,  
>unlike the uncompiled version). So we have to resort to some 
>such as changing the inner iterator to {j, n} and adding If[j>i,  
>Continue[]] to the loop body, which of course decreases the 
>Maxim Rytin
>m.r at


I had told you this before: 

using compiled functions needs some sort of purposive pragmatism. 
Also mistrust any compiled function f with

In[3]:= FreeQ[f[[-2]], Function]
Out[3]= False

This case can be solved easily:
In[4]:= f2 = Compile[{{n, _Integer}},
           Module[{s = 0}, Do[Do[s += j, {j, i}], {i, n}];

In[5]:= f2[10]
Out[5]= 220

In[6]:= FreeQ[f2[[-2]], Function]
Out[6]= True

Hartmut Wolf

  • Prev by Date: Re: findfit or solve?
  • Next by Date: Re: RationalApproximation
  • Previous by thread: Re: Nested iterators in Compile
  • Next by thread: Re: Re: Nested iterators in Compile