         {
             size_t a = n*current_layer_out_size_x*current_layer_out_size_y*current_layer_out_size_z + i*current_layer_out_size_z + j;
 
-            const float_type prev_inf_coeff = expr_inf_coeff[a];
-            const float_type prev_sup_coeff = expr_sup_coeff[a];
-
-            if((prev_inf_coeff != 0) || (prev_sup_coeff != 0))
-            {
-                elina_double_interval_mul_cst_coeff_const_expr(&tmp1, &tmp2, prev_inf_coeff, prev_sup_coeff, aux_csts[j]);
-
-                maxRes = max(abs(inf_cst), abs(sup_cst));
-                maxMul = max(abs(tmp1), abs(tmp2));
-
-                inf_cst += tmp1 - (maxRes + maxMul)*ulp - min_denormal;
-                sup_cst += tmp2 + (maxRes + maxMul)*ulp + min_denormal;
-            }
+            elina_double_interval_mul_cst_coeff_const_expr(&tmp1, &tmp2, expr_inf_coeff[a], expr_sup_coeff[a], aux_csts[j]);
+
+            maxRes = max(abs(inf_cst), abs(sup_cst));
+            maxMul = max(abs(tmp1), abs(tmp2));
+
+            inf_cst += tmp1 - (maxRes + maxMul)*ulp - min_denormal;
+            sup_cst += tmp2 + (maxRes + maxMul)*ulp + min_denormal;
         }
 
         j += blockDim.x;
     }
 
-    block_reduce_sum(inf_cst, blockDim.x);
-    block_reduce_sum(sup_cst, blockDim.x);
+    block_reduce_sum_csts(inf_cst, sup_cst, blockDim.x);
 
     if(threadIdx.x == 0)
     {

            for(long int out_y = min_y; out_y < max_y; out_y++)
            {
                size_t mat_out = n*length_x*length_y*output_size_z + out_x*length_y*output_size_z + out_y*output_size_z + out_z;

                const float_type prev_linf_coeff = expr_linf_coeff[mat_out];
                const float_type prev_lsup_coeff = expr_lsup_coeff[mat_out];

                elina_double_interval_mul_cst_coeff_const_expr(&tmp1, &tmp2, prev_linf_coeff, prev_lsup_coeff, aux_csts[out_z]);

                maxRes = max(abs(linf_cst), abs(lsup_cst));
                maxMul = max(abs(tmp1), abs(tmp2));

    while(i < num_out_neurons_current_layer)
    {
        size_t a = n*num_out_neurons_current_layer + i;
        const float_type aux_cst = aux_csts[i];

        elina_double_interval_mul_cst_coeff_const_expr(&tmp1, &tmp2, expr_linf_coeff[a], expr_lsup_coeff[a], aux_cst);

        maxRes = max(abs(linf_cst), abs(lsup_cst));
        maxMul = max(abs(tmp1), abs(tmp2));
