merge the formfield patch from ooo-build
[ooovba.git] / sc / source / core / tool / subtotal.cxx
blob8819b2e4c1d799f95fb9860ba53f30b8a065c9ac
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: subtotal.cxx,v $
10 * $Revision: 1.7.32.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_sc.hxx"
33 // INCLUDE ---------------------------------------------------------------
37 #include "subtotal.hxx"
38 #include "interpre.hxx"
40 // -----------------------------------------------------------------------
42 BOOL SubTotal::SafePlus(double& fVal1, double fVal2)
44 BOOL bOk = TRUE;
45 SAL_MATH_FPEXCEPTIONS_OFF();
46 fVal1 += fVal2;
47 if (!::rtl::math::isFinite(fVal1))
49 bOk = FALSE;
50 if (fVal2 > 0.0)
51 fVal1 = DBL_MAX;
52 else
53 fVal1 = -DBL_MAX;
55 return bOk;
59 BOOL SubTotal::SafeMult(double& fVal1, double fVal2)
61 BOOL bOk = TRUE;
62 SAL_MATH_FPEXCEPTIONS_OFF();
63 fVal1 *= fVal2;
64 if (!::rtl::math::isFinite(fVal1))
66 bOk = FALSE;
67 fVal1 = DBL_MAX;
69 return bOk;
73 BOOL SubTotal::SafeDiv(double& fVal1, double fVal2)
75 BOOL bOk = TRUE;
76 SAL_MATH_FPEXCEPTIONS_OFF();
77 fVal1 /= fVal2;
78 if (!::rtl::math::isFinite(fVal1))
80 bOk = FALSE;
81 fVal1 = DBL_MAX;
83 return bOk;