[Libreoffice-commits] core.git: include/formula

Eike Rathke erack at redhat.com
Tue Sep 13 13:29:48 UTC 2016


 include/formula/errorcodes.hxx |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

New commits:
commit 4ef10fce39575ec0bd3793b5fdf731c0b9af25a3
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Sep 13 15:26:09 2016 +0200

    recognize NaN with no bits set in lower word as error
    
    Which can happen for example for -nan(0x8000000000000) as a result of
    calculating with -inf. This was displayed as NaN instead of a proper error
    value, now #NUM!
    
    Example test case:
    =FORECAST.ETS.ADD(50, {-1,-2,-3,-4}, {10,20,30,40})
    
    Change-Id: I1e1d95e1f188e0036b72be37dd20039c9a9a13f6

diff --git a/include/formula/errorcodes.hxx b/include/formula/errorcodes.hxx
index 1157415..e4732b3 100644
--- a/include/formula/errorcodes.hxx
+++ b/include/formula/errorcodes.hxx
@@ -105,11 +105,14 @@ inline sal_uInt16 GetDoubleErrorValue( double fVal )
         return 0;
     if ( ::rtl::math::isInf( fVal ) )
         return errIllegalFPOperation;       // normal INF
-    sal_uInt32 nErr = reinterpret_cast< sal_math_Double * >(
-            &fVal)->nan_parts.fraction_lo;
+    sal_uInt32 nErr = reinterpret_cast< sal_math_Double * >( &fVal)->nan_parts.fraction_lo;
     if ( nErr & 0xffff0000 )
         return errNoValue;                  // just a normal NAN
-    return (sal_uInt16)(nErr & 0x0000ffff);     // any other error
+    if (!nErr)
+        // Another NAN, e.g. -nan(0x8000000000000) from calculating with -inf
+        return errIllegalFPOperation;
+    // Any other error known to us as error code.
+    return (sal_uInt16)(nErr & 0x0000ffff);
 }
 
 } // namespace formula


More information about the Libreoffice-commits mailing list