Nested iterators in Compile
- To: mathgroup at smc.vnet.net
- Subject: [mg55010] Nested iterators in Compile
- From: Maxim <ab_def at prontomail.com>
- Date: Wed, 9 Mar 2005 06:34:35 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
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
- Follow-Ups:
- Re: Nested iterators in Compile
- From: Andrzej Kozlowski <akoz@mimuw.edu.pl>
- Re: Nested iterators in Compile