sc/source/core/data/table4.cxx |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

New commits:
commit d5ebe7c3089ab9f4d3fe0707169fc1ce024cdb70
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Mon Sep 21 10:21:24 2020 +0200
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Mon Sep 21 11:12:07 2020 +0200

    tdf#129606: Round the mean of the two subtractions
    
    This improves handling of cases when the two subtraction methods give
    these values:
    
    c = -0.10000000000000053
    d = -0.10000000000000006
    
    Rounding c would give -0.10000000000000100, while rounding the mean
    gives -0.10000000000000001.
    
    Change-Id: I9805bc78bd1dec8ed77b660df1e366d36348f68b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103048
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx
index 9403d1b913a7..09a17546c002 100644
--- a/sc/source/core/data/table4.cxx
+++ b/sc/source/core/data/table4.cxx
@@ -208,7 +208,8 @@ double approxDiff( double a, double b )
     // tdf#129606: Limit precision to the 16th significant digit of the least 
precise argument.
     // Cf. mnMaxGeneralPrecision in sc/source/core/data/column3.cxx.
     const int nExpArg = static_cast<int>(floor(log10(std::max(aa, ab)))) - 15;
-    return rtl::math::round(c, -std::max(nExp, nExpArg));
+    // Round the mean of the two subtractions
+    return rtl::math::round((c + d) / 2, -std::max(nExp, nExpArg));
 }
 }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to