From 8b945dfd640947e8e12a346fde2b50d395f34f4b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Wed, 28 Jun 2023 23:09:56 +0200
Subject: [PATCH] libkorder: use infinity instead of large constant in
 minimization algorith
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

By the way, also use C++17 initialization within “if” statement.
---
 mex/sources/libkorder/sylv/QuasiTriangular.cc | 35 +++++++++----------
 1 file changed, 16 insertions(+), 19 deletions(-)

diff --git a/mex/sources/libkorder/sylv/QuasiTriangular.cc b/mex/sources/libkorder/sylv/QuasiTriangular.cc
index faa81384c7..8757e0d8f9 100644
--- a/mex/sources/libkorder/sylv/QuasiTriangular.cc
+++ b/mex/sources/libkorder/sylv/QuasiTriangular.cc
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2004-2011 Ondra Kamenik
- * Copyright © 2019 Dynare Team
+ * Copyright © 2019-2023 Dynare Team
  *
  * This file is part of Dynare.
  *
@@ -28,6 +28,7 @@
 #include <cmath>
 #include <iostream>
 #include <sstream>
+#include <limits>
 
 double
 DiagonalBlock::getDeterminant() const
@@ -267,16 +268,14 @@ Diagonal::diag_iter
 Diagonal::findClosestBlock(diag_iter start, diag_iter end, double a)
 {
   diag_iter closest = start;
-  double minim = 1.0e100;
+  double minim {std::numeric_limits<double>::infinity()};
   for (diag_iter run = start; run != end; ++run)
-    {
-      double dist = std::abs(a - run->getSize());
-      if (dist < minim)
-        {
-          minim = dist;
-          closest = run;
-        }
-    }
+    if (double dist = std::abs(a - run->getSize());
+        dist < minim)
+      {
+        minim = dist;
+        closest = run;
+      }
   return closest;
 }
 
@@ -284,16 +283,14 @@ Diagonal::diag_iter
 Diagonal::findNextLargerBlock(diag_iter start, diag_iter end, double a)
 {
   diag_iter closest = start;
-  double minim = 1.0e100;
+  double minim {std::numeric_limits<double>::infinity()};
   for (diag_iter run = start; run != end; ++run)
-    {
-      double dist = run->getSize() - a;
-      if ((0 <= dist) && (dist < minim))
-        {
-          minim = dist;
-          closest = run;
-        }
-    }
+    if (double dist = run->getSize() - a;
+        0 <= dist && dist < minim)
+      {
+        minim = dist;
+        closest = run;
+      }
   return closest;
 }
 
-- 
GitLab