diff --git a/mex/sources/k_order_perturbation/k_ord_dynare.cc b/mex/sources/k_order_perturbation/k_ord_dynare.cc
index ce0b1b855035688be72218d28a0a0a620fac8850..907ed738163fc0794d15795ef8bc980752fd5abb 100644
--- a/mex/sources/k_order_perturbation/k_ord_dynare.cc
+++ b/mex/sources/k_order_perturbation/k_ord_dynare.cc
@@ -167,8 +167,8 @@ KordpDynare::populateDerivativesContainer(const TwoDMatrix &g, int ord, const ve
         {
           int j = (int) g.get(i, 0)-1; // hessian indices start with 1
           int i1 = (int) g.get(i, 1) -1;
-          int s0 = (int) floor(((double) i1)/((double) nJcols));
-          int s1 = i1- (nJcols*s0);
+          int s0 = i1 / nJcols;
+          int s1 = i1 % nJcols;
           if (s0 < nJcols1)
             s[0] = revOrder[s0];
           else
@@ -195,10 +195,10 @@ KordpDynare::populateDerivativesContainer(const TwoDMatrix &g, int ord, const ve
         {
           int j = (int) g.get(i, 0)-1;
           int i1 = (int) g.get(i, 1) -1;
-          int s0 = (int) floor(((double) i1)/((double) nJcols2));
-          int i2 = i1 - nJcols2*s0;
-          int s1 = (int) floor(((double) i2)/((double) nJcols));
-          int s2 = i2 - nJcols*s1;
+          int s0 = i1 / nJcols2;
+          int i2 = i1 % nJcols2;
+          int s1 = i2 / nJcols;
+          int s2 = i2 % nJcols;
           if (s0 < nJcols1)
             s[0] = revOrder[s0];
           else