lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master 4b2bdc9 4/4: Fix the failing tests just commi


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 4b2bdc9 4/4: Fix the failing tests just committed
Date: Sun, 18 Mar 2018 20:02:19 -0400 (EDT)

branch: master
commit 4b2bdc90b54d159e196aad6424aa5d4437806a39
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>

    Fix the failing tests just committed
    
    Redesigned the scaling-factor algorithm to be correct when the number
    of characters allowed to the left of the decimal point is constrained
    to a value that is not a multiple of three. The manifest constant '6'
    had never been documented, and probably was just a magical value that
    made the original code seem correct when exactly nine characters are
    allowed. Comprehensibility has been improved along with correctness.
---
 miscellany.cpp | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/miscellany.cpp b/miscellany.cpp
index a15f960..3c969c7 100644
--- a/miscellany.cpp
+++ b/miscellany.cpp
@@ -135,13 +135,16 @@ int scale_power(int max_power, double min_value, double 
max_value)
         return 0;
         }
 
-    int k = static_cast<int>(std::log10(widest));
-    k = 3 * (k / 3) - 6;
+    // Only characters [0-9-] to the left of any decimal point matter.
+    int const chars_required  = 1 + static_cast<int>(std::log10(widest));
+    int const chars_available = max_power;
+    int const excess = chars_required - chars_available;
+    int const r = 3 * (1 + (excess - 1) / 3);
 
-    LMI_ASSERT(0 <= k);
-    LMI_ASSERT(k <= 18);
+    LMI_ASSERT(0 <= r);
+    LMI_ASSERT(r <= 18);
 
-    return k;
+    return r;
 }
 
 /// Return the number of newline characters in a string.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]