Dynare++: small optimization in unfolded tensor indexing

time-shift
Sébastien Villemot 2019-02-20 13:05:04 +01:00
parent 30b8681731
commit c0224a640c
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
1 changed files with 6 additions and 8 deletions

View File

@ -83,12 +83,11 @@ UTensor::decrement(IntSequence &v, const IntSequence &nvmx)
int int
UTensor::getOffset(const IntSequence &v, int nv) UTensor::getOffset(const IntSequence &v, int nv)
{ {
int pow = 1;
int res = 0; int res = 0;
for (int i = v.size()-1; i >= 0; i--) for (int i = 0; i < v.size(); i++)
{ {
res += v[i]*pow; res *= nv;
pow *= nv; res += v[i];
} }
return res; return res;
} }
@ -98,12 +97,11 @@ UTensor::getOffset(const IntSequence &v, int nv)
int int
UTensor::getOffset(const IntSequence &v, const IntSequence &nvmx) UTensor::getOffset(const IntSequence &v, const IntSequence &nvmx)
{ {
int pow = 1;
int res = 0; int res = 0;
for (int i = v.size()-1; i >= 0; i--) for (int i = 0; i < v.size(); i++)
{ {
res += v[i]*pow; res *= nvmx[i];
pow *= nvmx[i]; res += v[i];
} }
return res; return res;
} }