|
[Date Index]
[Thread Index]
[Author Index]
Re: Nested iterators in Compile
- To: mathgroup at smc.vnet.net
- Subject: [mg55053] Re: [mg55010] Nested iterators in Compile
- From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com>
- Date: Thu, 10 Mar 2005 05:25:20 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
>-----Original Message-----
>From: Maxim [mailto:ab_def at prontomail.com]
To: mathgroup at smc.vnet.net
>Sent: Wednesday, March 09, 2005 12:35 PM
>To: mathgroup at smc.vnet.net
>Subject: [mg55053] [mg55010] Nested iterators in Compile
>
>The fact that iterators work differently when used in Compile
>seems to
>lead to a serious limitation:
>
>In[1]:=
>Compile[{n},
> Module[{s = 0},
> Do[s += j, {i, n}, {j, i}];
> s
>]][10]
>
>CompiledFunction::cfse: Compiled expression i should be a
>machine-size
>real number.
>
>CompiledFunction::cfex: External evaluation error at instruction 4;
>proceeding with uncompiled evaluation.
>
>Out[1]=
>220
>
>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
>workarounds
>such as changing the inner iterator to {j, n} and adding If[j>i,
>Continue[]] to the loop body, which of course decreases the
>performance.
>
>Maxim Rytin
>m.r at inbox.ru
>
>
Maxim,
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}];
s]];
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
|