From c0224a640c86e74cfdb680b49fd1411842ad64b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= Date: Wed, 20 Feb 2019 13:05:04 +0100 Subject: [PATCH] Dynare++: small optimization in unfolded tensor indexing --- dynare++/tl/cc/tensor.cc | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/dynare++/tl/cc/tensor.cc b/dynare++/tl/cc/tensor.cc index 2c59caea7..778419247 100644 --- a/dynare++/tl/cc/tensor.cc +++ b/dynare++/tl/cc/tensor.cc @@ -83,12 +83,11 @@ UTensor::decrement(IntSequence &v, const IntSequence &nvmx) int UTensor::getOffset(const IntSequence &v, int nv) { - int pow = 1; int res = 0; - for (int i = v.size()-1; i >= 0; i--) + for (int i = 0; i < v.size(); i++) { - res += v[i]*pow; - pow *= nv; + res *= nv; + res += v[i]; } return res; } @@ -98,12 +97,11 @@ UTensor::getOffset(const IntSequence &v, int nv) int UTensor::getOffset(const IntSequence &v, const IntSequence &nvmx) { - int pow = 1; int res = 0; - for (int i = v.size()-1; i >= 0; i--) + for (int i = 0; i < v.size(); i++) { - res += v[i]*pow; - pow *= nvmx[i]; + res *= nvmx[i]; + res += v[i]; } return res; }