[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master d584c2a 1/2: Document a MinGW-w64 gcc-7.2.0 a
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master d584c2a 1/2: Document a MinGW-w64 gcc-7.2.0 anomaly |
Date: |
Mon, 12 Mar 2018 08:28:44 -0400 (EDT) |
branch: master
commit d584c2a02d7dae9e847e5992c2e815beab230f4b
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>
Document a MinGW-w64 gcc-7.2.0 anomaly
For integral N, log10(10^N) is not an exact integer.
---
ledger_base.cpp | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/ledger_base.cpp b/ledger_base.cpp
index 54659da..3a1842d 100644
--- a/ledger_base.cpp
+++ b/ledger_base.cpp
@@ -355,7 +355,21 @@ namespace
double power = -std::log10(a_ScalingFactor);
// Assert absolute equality of two floating-point quantities, because
// they must both have integral values.
- LMI_ASSERT(power == std::floor(power));
+ // PDF !! Fails with MinGW-w64 gcc-7.2.0 .
+ if(power != std::floor(power))
+ {
+ long double discrepancy0 = power - std::floor(power);
+ long double discrepancy1 = power - std::ceil (power);
+ warning()
+ << "Scaling factor is not an integral power of ten."
+ << "\n " << value_cast<std::string>(power) << "
logarithm"
+ << "\n " << value_cast<std::string>(std::floor(power)) << "
integer"
+ << "\n " << value_cast<std::string>(discrepancy0) << " lower
difference"
+ << "\n " << value_cast<std::string>(discrepancy1) << " upper
difference"
+ << LMI_FLUSH
+ ;
+ }
+// LMI_ASSERT(power == std::floor(power));
int z = static_cast<int>(power);
// US names are used; UK names are different.