changeset 24196:2b769c242188

Use std::max to simplify calculating pinv tolerance. * CMatrix.cc, dMatrix.cc, fCMatrix.cc, fMatrix.cc (pseudo_inverse): Replace if/else decision based on rows with std::max (nr, nc).
author Rik <rik@octave.org>
date Fri, 03 Nov 2017 13:53:45 -0700
parents d3dc76efb38b
children 11cdca79d316
files liboctave/array/CMatrix.cc liboctave/array/dMatrix.cc liboctave/array/fCMatrix.cc liboctave/array/fMatrix.cc
diffstat 4 files changed, 8 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/array/CMatrix.cc	Fri Nov 03 10:03:36 2017 -0700
+++ b/liboctave/array/CMatrix.cc	Fri Nov 03 13:53:45 2017 -0700
@@ -969,10 +969,8 @@
 
   if (tol <= 0.0)
     {
-      if (nr > nc)
-        tol = nr * sigma.elem (0) * std::numeric_limits<double>::epsilon ();
-      else
-        tol = nc * sigma.elem (0) * std::numeric_limits<double>::epsilon ();
+      tol = std::max (nr, nc) * sigma.elem (0)
+            * std::numeric_limits<double>::epsilon ();
 
       if (tol == 0)
         tol = std::numeric_limits<double>::min ();
--- a/liboctave/array/dMatrix.cc	Fri Nov 03 10:03:36 2017 -0700
+++ b/liboctave/array/dMatrix.cc	Fri Nov 03 13:53:45 2017 -0700
@@ -668,10 +668,8 @@
 
   if (tol <= 0.0)
     {
-      if (nr > nc)
-        tol = nr * sigma.elem (0) * std::numeric_limits<double>::epsilon ();
-      else
-        tol = nc * sigma.elem (0) * std::numeric_limits<double>::epsilon ();
+      tol = std::max (nr, nc) * sigma.elem (0)
+            * std::numeric_limits<double>::epsilon ();
 
       if (tol == 0)
         tol = std::numeric_limits<double>::min ();
--- a/liboctave/array/fCMatrix.cc	Fri Nov 03 10:03:36 2017 -0700
+++ b/liboctave/array/fCMatrix.cc	Fri Nov 03 13:53:45 2017 -0700
@@ -971,10 +971,8 @@
 
   if (tol <= 0.0)
     {
-      if (nr > nc)
-        tol = nr * sigma.elem (0) * std::numeric_limits<float>::epsilon ();
-      else
-        tol = nc * sigma.elem (0) * std::numeric_limits<float>::epsilon ();
+      tol = std::max (nr, nc) * sigma.elem (0)
+            * std::numeric_limits<float>::epsilon ();
 
       if (tol == 0)
         tol = std::numeric_limits<float>::min ();
--- a/liboctave/array/fMatrix.cc	Fri Nov 03 10:03:36 2017 -0700
+++ b/liboctave/array/fMatrix.cc	Fri Nov 03 13:53:45 2017 -0700
@@ -674,10 +674,8 @@
 
   if (tol <= 0.0)
     {
-      if (nr > nc)
-        tol = nr * sigma.elem (0) * std::numeric_limits<float>::epsilon ();
-      else
-        tol = nc * sigma.elem (0) * std::numeric_limits<float>::epsilon ();
+      tol = std::max (nr, nc) * sigma.elem (0)
+            * std::numeric_limits<float>::epsilon ();
 
       if (tol == 0)
         tol = std::numeric_limits<float>::min ();