changeset 27451:ce0399fa017a

Display only 5 significant digits for "format short" at all times (bug #56936). * pr-output.cc (make_real_format): Change "if (digits > 0)/else" to "if (digits > 0)/else if (digits < 0)/else" tree where final else handles special case of digits==0. * pr-output.cc (make_real_matrix_format, make_complex_format, make_complex_matrix_format, make_range_format): Change if/else to if/else if/else tree when examining x_max and x_min. Final else clause provides special behavior for x_max or x_min == 0.
author Rik <rik@octave.org>
date Fri, 27 Sep 2019 13:57:11 -0700
parents c3ea5c772a84
children 1aa7568aa139
files libinterp/corefcn/pr-output.cc
diffstat 1 files changed, 62 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/pr-output.cc	Fri Sep 27 16:08:41 2019 -0400
+++ b/libinterp/corefcn/pr-output.cc	Fri Sep 27 13:57:11 2019 -0700
@@ -403,10 +403,15 @@
           ld = digits;
           rd = (prec > digits ? prec - digits : prec);
         }
+      else if (digits < 0)
+        {
+          ld = 1;
+          rd = (prec > digits ? prec - digits : prec);
+        }
       else
         {
           ld = 1;
-          rd = (prec > digits ? prec - digits : prec);
+          rd = (prec > digits ? prec - 1 : prec);
         }
 
       fw = 1 + ld + 1 + rd;
@@ -546,12 +551,18 @@
           rd_max = (prec > x_max ? prec - x_max : prec);
           x_max++;
         }
-      else
+      else if (x_max < 0)
         {
           ld_max = 1;
           rd_max = (prec > x_max ? prec - x_max : prec);
           x_max = -x_max + 1;
         }
+      else
+        {
+          ld_max = 1;
+          rd_max = (prec > 1 ? prec - 1 : prec);
+          x_max = 1;
+        }
 
       int ld_min, rd_min;
       if (x_min > 0)
@@ -560,12 +571,18 @@
           rd_min = (prec > x_min ? prec - x_min : prec);
           x_min++;
         }
-      else
+      else if (x_min < 0)
         {
           ld_min = 1;
           rd_min = (prec > x_min ? prec - x_min : prec);
           x_min = -x_min + 1;
         }
+      else
+        {
+          ld_min = 1;
+          rd_min = (prec > 1 ? prec - 1 : prec);
+          x_min = 1;
+        }
 
       ld = (ld_max > ld_min ? ld_max : ld_min);
       rd = (rd_max > rd_min ? rd_max : rd_min);
@@ -721,12 +738,18 @@
           rd_max = (prec > x_max ? prec - x_max : prec);
           x_max++;
         }
-      else
+      else if (x_max < 0)
         {
           ld_max = 1;
           rd_max = (prec > x_max ? prec - x_max : prec);
           x_max = -x_max + 1;
         }
+      else
+        {
+          ld_max = 1;
+          rd_max = (prec > 1 ? prec - 1 : prec);
+          x_max = 1;
+        }
 
       int ld_min, rd_min;
       if (x_min > 0)
@@ -735,12 +758,18 @@
           rd_min = (prec > x_min ? prec - x_min : prec);
           x_min++;
         }
-      else
+      else if (x_min < 0)
         {
           ld_min = 1;
           rd_min = (prec > x_min ? prec - x_min : prec);
           x_min = -x_min + 1;
         }
+      else
+        {
+          ld_min = 1;
+          rd_min = (prec > 1 ? prec - 1 : prec);
+          x_min = 1;
+        }
 
       ld = (ld_max > ld_min ? ld_max : ld_min);
       rd = (rd_max > rd_min ? rd_max : rd_min);
@@ -940,12 +969,18 @@
           rd_max = (prec > x_max ? prec - x_max : prec);
           x_max++;
         }
-      else
+      else if (x_max < 0)
         {
           ld_max = 1;
           rd_max = (prec > x_max ? prec - x_max : prec);
           x_max = -x_max + 1;
         }
+      else
+        {
+          ld_max = 1;
+          rd_max = (prec > 1 ? prec - 1 : prec);
+          x_max = 1;
+        }
 
       int ld_min, rd_min;
       if (x_min > 0)
@@ -954,12 +989,18 @@
           rd_min = (prec > x_min ? prec - x_min : prec);
           x_min++;
         }
-      else
+      else if (x_min < 0)
         {
           ld_min = 1;
           rd_min = (prec > x_min ? prec - x_min : prec);
           x_min = -x_min + 1;
         }
+      else
+        {
+          ld_min = 1;
+          rd_min = (prec > 1 ? prec - 1 : prec);
+          x_min = 1;
+        }
 
       ld = (ld_max > ld_min ? ld_max : ld_min);
       rd = (rd_max > rd_min ? rd_max : rd_min);
@@ -1154,12 +1195,18 @@
           rd_max = (prec > x_max ? prec - x_max : prec);
           x_max++;
         }
-      else
+      else if (x_max < 0)
         {
           ld_max = 1;
           rd_max = (prec > x_max ? prec - x_max : prec);
           x_max = -x_max + 1;
         }
+      else
+        {
+          ld_max = 1;
+          rd_max = (prec > 1 ? prec - 1 : prec);
+          x_max = 1;
+        }
 
       int ld_min, rd_min;
       if (x_min > 0)
@@ -1168,12 +1215,18 @@
           rd_min = (prec > x_min ? prec - x_min : prec);
           x_min++;
         }
-      else
+      else if (x_min < 0)
         {
           ld_min = 1;
           rd_min = (prec > x_min ? prec - x_min : prec);
           x_min = -x_min + 1;
         }
+      else
+        {
+          ld_min = 1;
+          rd_min = (prec > 1 ? prec - 1 : prec);
+          x_min = 1;
+        }
 
       ld = (ld_max > ld_min ? ld_max : ld_min);
       rd = (rd_max > rd_min ? rd_max : rd_min);