[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master cde9755 3/6: Factor out max-power-of-10 param
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master cde9755 3/6: Factor out max-power-of-10 parameter [383] |
Date: |
Thu, 15 Mar 2018 20:12:22 -0400 (EDT) |
branch: master
commit cde9755a3bedb84cb6f01727fcf2929f19d0fa3b
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>
Factor out max-power-of-10 parameter [383]
Made the threshold value for scaling into an argument. Its value is
hard-coded for now, and the effect of changing it has not been tested.
It would not make sense to treat the highest supported scaling power a
parameter: currency amounts beyond quintillions will not be needed for
the anticipated lifetime of lmi.
---
ledger.cpp | 6 ++++--
ledger_base.cpp | 12 ++++--------
ledger_base.hpp | 2 +-
3 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/ledger.cpp b/ledger.cpp
index c49f38d..86f06f7 100644
--- a/ledger.cpp
+++ b/ledger.cpp
@@ -315,12 +315,14 @@ int Ledger::GetMaxLength() const
// largest absolute value of any number in any column of every subledger.
void Ledger::AutoScale()
{
- int k = ledger_invariant_->DetermineScalePower();
+ int const max_power = 9;
+
+ int k = ledger_invariant_->DetermineScalePower(max_power);
ledger_map_t& l_map_rep = ledger_map_->held_;
for(auto const& i : l_map_rep)
{
- k = std::max(k, i.second.DetermineScalePower());
+ k = std::max(k, i.second.DetermineScalePower(max_power));
}
ledger_invariant_->ApplyScaleFactor(k);
diff --git a/ledger_base.cpp b/ledger_base.cpp
index 2252738..c41f23f 100644
--- a/ledger_base.cpp
+++ b/ledger_base.cpp
@@ -307,7 +307,7 @@ LedgerBase& LedgerBase::PlusEq
/// Triple-power-of-ten scaling to keep ledger extremum < 10^max_power.
-int LedgerBase::DetermineScalePower() const
+int LedgerBase::DetermineScalePower(int max_power) const
{
double min_value = 0.0;
double max_value = 0.0;
@@ -327,17 +327,13 @@ int LedgerBase::DetermineScalePower() const
,max_value
);
-// TODO ?? It would be nicer to factor out
-// 1000000000.0 (max width)
-// and 1.0E-18 (highest number we translate to words)
-// and make them variables.
-// PDF !! This seems not to be rigorously correct: $999,999,999.99 is
-// less than one billion, but rounds to $1,000,000,000.
- if(widest < 1000000000.0 || widest == 0)
+ if(widest < nonstd::power(10.0, max_power) || widest == 0)
{
return 0;
}
+// PDF !! This seems not to be rigorously correct: $999,999,999.99 is
+// less than one billion, but rounds to $1,000,000,000.
double d = std::log10(widest);
d = std::floor(d / 3.0);
int k = 3 * static_cast<int>(d);
diff --git a/ledger_base.hpp b/ledger_base.hpp
index 0c3902a..98b7322 100644
--- a/ledger_base.hpp
+++ b/ledger_base.hpp
@@ -176,7 +176,7 @@ class LMI_SO LedgerBase
void ApplyScaleFactor(int decimal_power);
- int DetermineScalePower() const;
+ int DetermineScalePower(int max_power) const;
std::string const& ScaleUnit() const;
// PDF !! expunge
int ScalePower() const;
- [lmi-commits] [lmi] master updated (17e1597 -> 566fa11), Greg Chicares, 2018/03/15
- [lmi-commits] [lmi] master ea7a389 2/6: Improve local variable names, Greg Chicares, 2018/03/15
- [lmi-commits] [lmi] master f2a2eff 5/6: Factor out the tricky part of ledger scaling, to permit unit testing, Greg Chicares, 2018/03/15
- [lmi-commits] [lmi] master ca96637 4/6: Fix an obvious optimization failure, Greg Chicares, 2018/03/15
- [lmi-commits] [lmi] master e95a948 1/6: Improve documentation, Greg Chicares, 2018/03/15
- [lmi-commits] [lmi] master cde9755 3/6: Factor out max-power-of-10 parameter [383],
Greg Chicares <=
- [lmi-commits] [lmi] master 566fa11 6/6: Show scaled units on a page with scaled values, Greg Chicares, 2018/03/15