diff options
55 files changed, 252 insertions, 377 deletions
diff --git a/chart2/qa/extras/charttest.hxx b/chart2/qa/extras/charttest.hxx index 0a7b00cc884e..9b162acc06e8 100644 --- a/chart2/qa/extras/charttest.hxx +++ b/chart2/qa/extras/charttest.hxx @@ -442,9 +442,6 @@ std::vector<std::vector<double> > getDataSeriesYValuesFromChartType( const Refer CPPUNIT_ASSERT(xDSCont.is()); const Sequence<uno::Reference<chart2::XDataSeries> > aDataSeriesSeq = xDSCont->getDataSeries(); - double fNan; - rtl::math::setNan(&fNan); - std::vector<std::vector<double> > aRet; for (uno::Reference<chart2::XDataSeries> const & ds : aDataSeriesSeq) { @@ -472,7 +469,7 @@ std::vector<std::vector<double> > getDataSeriesYValuesFromChartType( const Refer if (any >>= fVal) aValues.push_back(fVal); else - aValues.push_back(fNan); + aValues.push_back(std::numeric_limits<double>::quiet_NaN()); } aRet.push_back(aValues); } diff --git a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx index 9fc30c823a79..aabdce1c8f65 100644 --- a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx @@ -28,7 +28,8 @@ #include <com/sun/star/chart/XChartDocument.hpp> #include <float.h> -#include <rtl/math.hxx> +#include <cmath> +#include <limits> #include <osl/diagnose.h> using namespace ::com::sun::star; @@ -57,7 +58,7 @@ uno::Sequence< uno::Sequence< double > > lcl_getNANInsteadDBL_MIN( const uno::Se aRet[nOuter][nInner] = rData[nOuter][nInner]; double& rValue = aRet[nOuter][nInner]; if( rValue == DBL_MIN ) - ::rtl::math::setNan( &rValue ); + rValue = std::numeric_limits<double>::quiet_NaN(); } } return aRet; diff --git a/chart2/source/controller/dialogs/DataBrowser.cxx b/chart2/source/controller/dialogs/DataBrowser.cxx index 37e820eb5d94..e5e9be3b99a5 100644 --- a/chart2/source/controller/dialogs/DataBrowser.cxx +++ b/chart2/source/controller/dialogs/DataBrowser.cxx @@ -35,7 +35,6 @@ #include <vcl/settings.hxx> #include <vcl/svapp.hxx> #include <vcl/virdev.hxx> -#include <rtl/math.hxx> #include <o3tl/safeint.hxx> #include <osl/diagnose.h> #include <toolkit/helper/vclunohelper.hxx> @@ -45,6 +44,7 @@ #include <com/sun/star/container/XIndexReplace.hpp> #include <algorithm> +#include <limits> using namespace ::com::sun::star; @@ -489,10 +489,8 @@ DataBrowser::DataBrowser(const css::uno::Reference<css::awt::XWindow> &rParent, m_rNumberEditController( new ::svt::FormattedFieldCellController( m_aNumberEditField.get() )), m_rTextEditController( new ::svt::EditCellController( m_aTextEditField.get() )) { - double fNan; - ::rtl::math::setNan( & fNan ); Formatter& rFormatter = m_aNumberEditField->get_formatter(); - rFormatter.SetDefaultValue( fNan ); + rFormatter.SetDefaultValue( std::numeric_limits<double>::quiet_NaN() ); rFormatter.TreatAsNumber( true ); RenewTable(); } @@ -741,16 +739,13 @@ OUString DataBrowser::GetCellText( sal_Int32 nRow, sal_uInt16 nColumnId ) const double DataBrowser::GetCellNumber( sal_Int32 nRow, sal_uInt16 nColumnId ) const { - double fResult; - ::rtl::math::setNan( & fResult ); - if(( nColumnId >= 1 ) && ( nRow >= 0 ) && m_apDataBrowserModel) { - fResult = m_apDataBrowserModel->getCellNumber( + return m_apDataBrowserModel->getCellNumber( static_cast< sal_Int32 >( nColumnId ) - 1, nRow ); } - return fResult; + return std::numeric_limits<double>::quiet_NaN(); } void DataBrowser::Resize() diff --git a/chart2/source/controller/dialogs/DataBrowserModel.cxx b/chart2/source/controller/dialogs/DataBrowserModel.cxx index c8359f74ab23..8de5c31e32dc 100644 --- a/chart2/source/controller/dialogs/DataBrowserModel.cxx +++ b/chart2/source/controller/dialogs/DataBrowserModel.cxx @@ -45,9 +45,8 @@ #include <tools/diagnose_ex.h> #include <comphelper/property.hxx> -#include <rtl/math.hxx> - #include <algorithm> +#include <limits> using namespace ::com::sun::star; @@ -582,9 +581,6 @@ DataBrowserModel::eCellType DataBrowserModel::getCellType( sal_Int32 nAtColumn ) double DataBrowserModel::getCellNumber( sal_Int32 nAtColumn, sal_Int32 nAtRow ) { - double fResult; - ::rtl::math::setNan( & fResult ); - tDataColumnVector::size_type nIndex( nAtColumn ); if( nIndex < m_aColumns.size() && m_aColumns[ nIndex ].m_xLabeledDataSequence.is()) @@ -595,10 +591,10 @@ double DataBrowserModel::getCellNumber( sal_Int32 nAtColumn, sal_Int32 nAtRow ) { Sequence< double > aValues( xData->getNumericalData()); if( nAtRow < aValues.getLength()) - fResult = aValues[nAtRow]; + return aValues[nAtRow]; } } - return fResult; + return std::numeric_limits<double>::quiet_NaN(); } uno::Any DataBrowserModel::getCellAny( sal_Int32 nAtColumn, sal_Int32 nAtRow ) diff --git a/chart2/source/inc/CommonFunctors.hxx b/chart2/source/inc/CommonFunctors.hxx index 9bdbce5af535..0340c82b692e 100644 --- a/chart2/source/inc/CommonFunctors.hxx +++ b/chart2/source/inc/CommonFunctors.hxx @@ -24,6 +24,8 @@ #include <rtl/ustring.hxx> #include "charttoolsdllapi.hxx" +#include <limits> + namespace chart::CommonFunctors { @@ -43,15 +45,13 @@ template< typename T > /** unary function to convert css::uno::Any into a double number. - <p>In case no number can be generated from the Any, NaN (see - rtl::math::SetNAN()) is returned.</p> + <p>In case no number can be generated from the Any, NaN is returned.</p> */ struct OOO_DLLPUBLIC_CHARTTOOLS AnyToDouble { double operator() ( const css::uno::Any & rAny ) { - double fResult; - ::rtl::math::setNan( & fResult ); + double fResult = std::numeric_limits<double>::quiet_NaN(); rAny >>= fResult; return fResult; } @@ -97,7 +97,7 @@ struct OOO_DLLPUBLIC_CHARTTOOLS OUStringToDouble double fResult = ::rtl::math::stringToDouble( rStr, '.', ',', & eConversionStatus ); if( eConversionStatus != rtl_math_ConversionStatus_Ok ) - ::rtl::math::setNan( & fResult ); + return std::numeric_limits<double>::quiet_NaN(); return fResult; } diff --git a/chart2/source/tools/CommonConverters.cxx b/chart2/source/tools/CommonConverters.cxx index 76bb4a071b7c..4993c749f2ca 100644 --- a/chart2/source/tools/CommonConverters.cxx +++ b/chart2/source/tools/CommonConverters.cxx @@ -24,10 +24,11 @@ #include <com/sun/star/chart2/data/XDataSequence.hpp> #include <com/sun/star/chart2/data/XNumericalDataSequence.hpp> #include <com/sun/star/chart2/data/XTextualDataSequence.hpp> -#include <rtl/math.hxx> #include <osl/diagnose.h> #include <basegfx/matrix/b3dhommatrix.hxx> +#include <limits> + namespace chart { @@ -429,7 +430,7 @@ uno::Sequence< double > DataSequenceToDoubleSequence( for(sal_Int32 nN=aValues.getLength();nN--;) { if( !(aValues[nN] >>= aResult[nN]) ) - ::rtl::math::setNan( &aResult[nN] ); + aResult[nN] = std::numeric_limits<double>::quiet_NaN(); } } diff --git a/chart2/source/tools/DiagramHelper.cxx b/chart2/source/tools/DiagramHelper.cxx index 80a75f333d28..3fbb442cccd8 100644 --- a/chart2/source/tools/DiagramHelper.cxx +++ b/chart2/source/tools/DiagramHelper.cxx @@ -57,6 +57,8 @@ #include <tools/diagnose_ex.h> #include <sal/log.hxx> +#include <limits> + using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; using namespace ::std; @@ -975,8 +977,6 @@ void lcl_switchToDateCategories( const Reference< XChartDocument >& xChartDoc, c { Sequence< Sequence< Any > > aAnyCategories( xDataAccess->getAnyRowDescriptions() ); double fTest = 0.0; - double fNan = 0.0; - ::rtl::math::setNan( & fNan ); sal_Int32 nN = aAnyCategories.getLength(); for( ; nN--; ) { @@ -988,7 +988,7 @@ void lcl_switchToDateCategories( const Reference< XChartDocument >& xChartDoc, c Any& rAny = rCat[0]; if( !(rAny>>=fTest) ) { - rAny <<= fNan; + rAny <<= std::numeric_limits<double>::quiet_NaN(); } } } diff --git a/chart2/source/tools/ExplicitCategoriesProvider.cxx b/chart2/source/tools/ExplicitCategoriesProvider.cxx index bf65f58ec850..57919f3cbada 100644 --- a/chart2/source/tools/ExplicitCategoriesProvider.cxx +++ b/chart2/source/tools/ExplicitCategoriesProvider.cxx @@ -29,9 +29,11 @@ #include <com/sun/star/chart2/AxisType.hpp> #include <o3tl/safeint.hxx> -#include <rtl/math.hxx> +#include <rtl/ustrbuf.hxx> #include <tools/diagnose_ex.h> +#include <limits> + namespace chart { @@ -453,8 +455,7 @@ static bool lcl_fillDateCategories( const uno::Reference< data::XDataSequence >& { if( aAny.hasValue() && !bContainsEmptyString )//empty string does not count as non date value! bOnlyDatesFound=false; - ::rtl::math::setNan( &aDate ); - rDateCategories.push_back( aDate ); + rDateCategories.push_back( std::numeric_limits<double>::quiet_NaN() ); } } std::sort( rDateCategories.begin(), rDateCategories.end() ); diff --git a/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx b/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx index 1d389d6f99bf..a5063ee1039b 100644 --- a/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx +++ b/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx @@ -19,6 +19,7 @@ #include <sal/config.h> +#include <limits> #include <string_view> #include <ExponentialRegressionCurveCalculator.hxx> @@ -34,12 +35,10 @@ namespace chart { ExponentialRegressionCurveCalculator::ExponentialRegressionCurveCalculator() - : m_fLogSlope(0.0) - , m_fLogIntercept(0.0) + : m_fLogSlope(std::numeric_limits<double>::quiet_NaN()) + , m_fLogIntercept(std::numeric_limits<double>::quiet_NaN()) , m_fSign(1.0) { - ::rtl::math::setNan( & m_fLogSlope ); - ::rtl::math::setNan( & m_fLogIntercept ); } ExponentialRegressionCurveCalculator::~ExponentialRegressionCurveCalculator() @@ -65,9 +64,9 @@ void SAL_CALL ExponentialRegressionCurveCalculator::recalculateRegression( nMax = aValues.first.size(); if( nMax <= 1 ) { - ::rtl::math::setNan( & m_fLogSlope ); - ::rtl::math::setNan( & m_fLogIntercept ); - ::rtl::math::setNan( & m_fCorrelationCoefficient );// actual it is coefficient of determination + m_fLogSlope = std::numeric_limits<double>::quiet_NaN(); + m_fLogIntercept = std::numeric_limits<double>::quiet_NaN(); + m_fCorrelationCoefficient = std::numeric_limits<double>::quiet_NaN();// actual it is coefficient of determination return; } m_fSign = -1.0; @@ -116,16 +115,13 @@ void SAL_CALL ExponentialRegressionCurveCalculator::recalculateRegression( double SAL_CALL ExponentialRegressionCurveCalculator::getCurveValue( double x ) { - double fResult; - ::rtl::math::setNan( & fResult ); - if( ! ( std::isnan( m_fLogSlope ) || std::isnan( m_fLogIntercept ))) { - fResult = m_fSign * exp(m_fLogIntercept + x * m_fLogSlope); + return m_fSign * exp(m_fLogIntercept + x * m_fLogSlope); } - return fResult; + return std::numeric_limits<double>::quiet_NaN(); } uno::Sequence< geometry::RealPoint2D > SAL_CALL ExponentialRegressionCurveCalculator::getCurveValues( diff --git a/chart2/source/tools/InternalData.cxx b/chart2/source/tools/InternalData.cxx index 35c615fe2873..1f5bcddc6c82 100644 --- a/chart2/source/tools/InternalData.cxx +++ b/chart2/source/tools/InternalData.cxx @@ -22,7 +22,6 @@ #include <strings.hrc> #include <osl/diagnose.h> -#include <rtl/math.hxx> #ifdef DEBUG_CHART2_TOOLS #define DEBUG_INTERNAL_DATA 1 @@ -34,6 +33,7 @@ #include <algorithm> #include <iterator> +#include <limits> using ::com::sun::star::uno::Sequence; @@ -129,10 +129,8 @@ void InternalData::setData( const Sequence< Sequence< double > >& rDataInRows ) m_aColumnLabels.resize( m_nColumnCount ); m_aData.resize( m_nRowCount * m_nColumnCount ); - double fNan; - ::rtl::math::setNan( & fNan ); // set all values to Nan - m_aData = fNan; + m_aData = std::numeric_limits<double>::quiet_NaN(); for( sal_Int32 nRow=0; nRow<m_nRowCount; ++nRow ) { @@ -296,9 +294,7 @@ bool InternalData::enlargeData( sal_Int32 nColumnCount, sal_Int32 nRowCount ) if( bGrow ) { - double fNan; - ::rtl::math::setNan( &fNan ); - tDataType aNewData( fNan, nNewSize ); + tDataType aNewData( std::numeric_limits<double>::quiet_NaN(), nNewSize ); // copy old data for( int nCol=0; nCol<m_nColumnCount; ++nCol ) static_cast< tDataType >( @@ -322,9 +318,7 @@ void InternalData::insertColumn( sal_Int32 nAfterIndex ) sal_Int32 nNewColumnCount = m_nColumnCount + 1; sal_Int32 nNewSize( nNewColumnCount * m_nRowCount ); - double fNan; - ::rtl::math::setNan( &fNan ); - tDataType aNewData( fNan, nNewSize ); + tDataType aNewData( std::numeric_limits<double>::quiet_NaN(), nNewSize ); // copy old data int nCol=0; @@ -379,9 +373,7 @@ void InternalData::insertRow( sal_Int32 nAfterIndex ) sal_Int32 nNewRowCount = m_nRowCount + 1; sal_Int32 nNewSize( m_nColumnCount * nNewRowCount ); - double fNan; - ::rtl::math::setNan( &fNan ); - tDataType aNewData( fNan, nNewSize ); + tDataType aNewData( std::numeric_limits<double>::quiet_NaN(), nNewSize ); // copy old data sal_Int32 nIndex = nAfterIndex + 1; @@ -416,9 +408,7 @@ void InternalData::deleteColumn( sal_Int32 nAtIndex ) sal_Int32 nNewColumnCount = m_nColumnCount - 1; sal_Int32 nNewSize( nNewColumnCount * m_nRowCount ); - double fNan; - ::rtl::math::setNan( &fNan ); - tDataType aNewData( fNan, nNewSize ); + tDataType aNewData( std::numeric_limits<double>::quiet_NaN(), nNewSize ); // copy old data int nCol=0; @@ -450,9 +440,7 @@ void InternalData::deleteRow( sal_Int32 nAtIndex ) sal_Int32 nNewRowCount = m_nRowCount - 1; sal_Int32 nNewSize( m_nColumnCount * nNewRowCount ); - double fNan; - ::rtl::math::setNan( &fNan ); - tDataType aNewData( fNan, nNewSize ); + tDataType aNewData( std::numeric_limits<double>::quiet_NaN(), nNewSize ); // copy old data sal_Int32 nIndex = nAtIndex; diff --git a/chart2/source/tools/InternalDataProvider.cxx b/chart2/source/tools/InternalDataProvider.cxx index e9beeb6d1d41..505159fa87b6 100644 --- a/chart2/source/tools/InternalDataProvider.cxx +++ b/chart2/source/tools/InternalDataProvider.cxx @@ -17,8 +17,6 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <rtl/math.hxx> - #include <iterator> #include <InternalDataProvider.hxx> @@ -40,6 +38,7 @@ #include <comphelper/property.hxx> #include <tools/diagnose_ex.h> +#include <limits> #include <vector> #include <algorithm> @@ -1365,16 +1364,15 @@ uno::Sequence< OUString > SplitCategoriesProvider_ForComplexDescriptions::getStr // ____ XDateCategories ____ Sequence< double > SAL_CALL InternalDataProvider::getDateCategories() { - double fNan = InternalDataProvider::getNotANumber(); - double fValue = fNan; vector< vector< uno::Any > > aCategories( m_bDataInColumns ? m_aInternalData.getComplexRowLabels() : m_aInternalData.getComplexColumnLabels()); sal_Int32 nCount = aCategories.size(); Sequence< double > aDoubles( nCount ); sal_Int32 nN=0; for (auto const& category : aCategories) { + double fValue; if( category.empty() || !(category[0]>>=fValue) ) - fValue = fNan; + fValue = std::numeric_limits<double>::quiet_NaN(); aDoubles[nN++]=fValue; } return aDoubles; @@ -1489,9 +1487,7 @@ void SAL_CALL InternalDataProvider::removeChartDataChangeEventListener( double SAL_CALL InternalDataProvider::getNotANumber() { - double fNan; - ::rtl::math::setNan( & fNan ); - return fNan; + return std::numeric_limits<double>::quiet_NaN(); } sal_Bool SAL_CALL InternalDataProvider::isNotANumber( double nNumber ) diff --git a/chart2/source/tools/LogarithmicRegressionCurveCalculator.cxx b/chart2/source/tools/LogarithmicRegressionCurveCalculator.cxx index bfa5d9e4be5d..c9e000e0243e 100644 --- a/chart2/source/tools/LogarithmicRegressionCurveCalculator.cxx +++ b/chart2/source/tools/LogarithmicRegressionCurveCalculator.cxx @@ -30,11 +30,9 @@ namespace chart { LogarithmicRegressionCurveCalculator::LogarithmicRegressionCurveCalculator() : - m_fSlope( 0.0 ), - m_fIntercept( 0.0 ) + m_fSlope( std::numeric_limits<double>::quiet_NaN() ), + m_fIntercept( std::numeric_limits<double>::quiet_NaN() ) { - ::rtl::math::setNan( & m_fSlope ); - ::rtl::math::setNan( & m_fIntercept ); } LogarithmicRegressionCurveCalculator::~LogarithmicRegressionCurveCalculator() @@ -53,9 +51,9 @@ void SAL_CALL LogarithmicRegressionCurveCalculator::recalculateRegression( const size_t nMax = aValues.first.size(); if( nMax <= 1 ) // at least 2 points { - ::rtl::math::setNan( & m_fSlope ); - ::rtl::math::setNan( & m_fIntercept ); - ::rtl::math::setNan( & m_fCorrelationCoefficient ); + m_fSlope = std::numeric_limits<double>::quiet_NaN(); + m_fIntercept = std::numeric_limits<double>::quiet_NaN(); + m_fCorrelationCoefficient = std::numeric_limits<double>::quiet_NaN(); return; } @@ -89,16 +87,13 @@ void SAL_CALL LogarithmicRegressionCurveCalculator::recalculateRegression( double SAL_CALL LogarithmicRegressionCurveCalculator::getCurveValue( double x ) { - double fResult; - ::rtl::math::setNan( & fResult ); - if( ! ( std::isnan( m_fSlope ) || std::isnan( m_fIntercept ))) { - fResult = m_fSlope * log( x ) + m_fIntercept; + return m_fSlope * log( x ) + m_fIntercept; } - return fResult; + return std::numeric_limits<double>::quiet_NaN(); } uno::Sequence< geometry::RealPoint2D > SAL_CALL LogarithmicRegressionCurveCalculator::getCurveValues( diff --git a/chart2/source/tools/MeanValueRegressionCurveCalculator.cxx b/chart2/source/tools/MeanValueRegressionCurveCalculator.cxx index c9821343b4ec..70c3f1822de4 100644 --- a/chart2/source/tools/MeanValueRegressionCurveCalculator.cxx +++ b/chart2/source/tools/MeanValueRegressionCurveCalculator.cxx @@ -20,7 +20,9 @@ #include <MeanValueRegressionCurveCalculator.hxx> #include <osl/diagnose.h> -#include <rtl/math.hxx> + +#include <cmath> +#include <limits> using namespace ::com::sun::star; @@ -28,9 +30,8 @@ namespace chart { MeanValueRegressionCurveCalculator::MeanValueRegressionCurveCalculator() : - m_fMeanValue( 0.0 ) + m_fMeanValue( std::numeric_limits<double>::quiet_NaN() ) { - ::rtl::math::setNan( & m_fMeanValue ); } MeanValueRegressionCurveCalculator::~MeanValueRegressionCurveCalculator() @@ -59,7 +60,7 @@ void SAL_CALL MeanValueRegressionCurveCalculator::recalculateRegression( if( nMax == 0 ) { - ::rtl::math::setNan( & m_fMeanValue ); + m_fMeanValue = std::numeric_limits<double>::quiet_NaN(); } else { diff --git a/chart2/source/tools/MovingAverageRegressionCurveCalculator.cxx b/chart2/source/tools/MovingAverageRegressionCurveCalculator.cxx index 1c456b8835e6..d21ec8d27714 100644 --- a/chart2/source/tools/MovingAverageRegressionCurveCalculator.cxx +++ b/chart2/source/tools/MovingAverageRegressionCurveCalculator.cxx @@ -22,7 +22,7 @@ #include <ResId.hxx> #include <strings.hrc> -#include <rtl/math.hxx> +#include <limits> #include <com/sun/star/chart2/MovingAverageType.hpp> @@ -43,7 +43,7 @@ void SAL_CALL MovingAverageRegressionCurveCalculator::recalculateRegression( const uno::Sequence< double >& aXValues, const uno::Sequence< double >& aYValues ) { - ::rtl::math::setNan( & m_fCorrelationCoefficient ); + m_fCorrelationCoefficient = std::numeric_limits<double>::quiet_NaN(); RegressionCalculationHelper::tDoubleVectorPair aValues( RegressionCalculationHelper::cleanup( @@ -134,9 +134,7 @@ void MovingAverageRegressionCurveCalculator::calculateValues( double SAL_CALL MovingAverageRegressionCurveCalculator::getCurveValue( double /*x*/ ) { - double fResult; - rtl::math::setNan(&fResult); - return fResult; + return std::numeric_limits<double>::quiet_NaN(); } uno::Sequence< geometry::RealPoint2D > SAL_CALL MovingAverageRegressionCurveCalculator::getCurveValues( diff --git a/chart2/source/tools/PolynomialRegressionCurveCalculator.cxx b/chart2/source/tools/PolynomialRegressionCurveCalculator.cxx index 38e326cbbbc4..d6b22c1635f5 100644 --- a/chart2/source/tools/PolynomialRegressionCurveCalculator.cxx +++ b/chart2/source/tools/PolynomialRegressionCurveCalculator.cxx @@ -21,6 +21,7 @@ #include <RegressionCalculationHelper.hxx> #include <cmath> +#include <limits> #include <rtl/math.hxx> #include <rtl/ustrbuf.hxx> @@ -90,7 +91,7 @@ void SAL_CALL PolynomialRegressionCurveCalculator::recalculateRegression( const uno::Sequence< double >& aXValues, const uno::Sequence< double >& aYValues ) { - rtl::math::setNan(&m_fCorrelationCoefficient); + m_fCorrelationCoefficient = std::numeric_limits<double>::quiet_NaN(); RegressionCalculationHelper::tDoubleVectorPair aValues( RegressionCalculationHelper::cleanup( aXValues, aYValues, RegressionCalculationHelper::isValid())); @@ -269,18 +270,13 @@ void SAL_CALL PolynomialRegressionCurveCalculator::recalculateRegression( double SAL_CALL PolynomialRegressionCurveCalculator::getCurveValue( double x ) { - double fResult; - rtl::math::setNan(&fResult); - if (mCoefficients.empty()) - { - return fResult; - } + return std::numeric_limits<double>::quiet_NaN(); sal_Int32 aNoCoefficients = static_cast<sal_Int32>(mCoefficients.size()); // Horner's method - fResult = 0.0; + double fResult = 0.0; for (sal_Int32 i = aNoCoefficients - 1; i >= 0; i--) { fResult = mCoefficients[i] + (x * fResult); diff --git a/chart2/source/tools/PotentialRegressionCurveCalculator.cxx b/chart2/source/tools/PotentialRegressionCurveCalculator.cxx index 89f6dc5b9e6e..1fa82434e0b4 100644 --- a/chart2/source/tools/PotentialRegressionCurveCalculator.cxx +++ b/chart2/source/tools/PotentialRegressionCurveCalculator.cxx @@ -21,6 +21,7 @@ #include <RegressionCalculationHelper.hxx> #include <SpecialCharacters.hxx> +#include <limits> #include <rtl/math.hxx> #include <rtl/ustrbuf.hxx> @@ -30,12 +31,10 @@ namespace chart { PotentialRegressionCurveCalculator::PotentialRegressionCurveCalculator() - : m_fSlope(0.0) - , m_fIntercept(0.0) + : m_fSlope(std::numeric_limits<double>::quiet_NaN()) + , m_fIntercept(std::numeric_limits<double>::quiet_NaN()) , m_fSign(1.0) { - ::rtl::math::setNan( & m_fSlope ); - ::rtl::math::setNan( & m_fIntercept ); } PotentialRegressionCurveCalculator::~PotentialRegressionCurveCalculator() @@ -61,9 +60,9 @@ void SAL_CALL PotentialRegressionCurveCalculator::recalculateRegression( nMax = aValues.first.size(); if( nMax <= 1 ) { - ::rtl::math::setNan( & m_fSlope ); - ::rtl::math::setNan( & m_fIntercept ); - ::rtl::math::setNan( & m_fCorrelationCoefficient ); + m_fSlope = std::numeric_limits<double>::quiet_NaN(); + m_fIntercept = std::numeric_limits<double>::quiet_NaN(); + m_fCorrelationCoefficient = std::numeric_limits<double>::quiet_NaN(); return; } m_fSign = -1.0; @@ -101,16 +100,13 @@ void SAL_CALL PotentialRegressionCurveCalculator::recalculateRegression( double SAL_CALL PotentialRegressionCurveCalculator::getCurveValue( double x ) { - double fResult; - ::rtl::math::setNan( & fResult ); - if( ! ( std::isnan( m_fSlope ) || std::isnan( m_fIntercept ))) { - fResult = m_fIntercept * pow( x, m_fSlope ); + return m_fIntercept * pow( x, m_fSlope ); } - return fResult; + return std::numeric_limits<double>::quiet_NaN(); } uno::Sequence< geometry::RealPoint2D > SAL_CALL PotentialRegressionCurveCalculator::getCurveValues( diff --git a/chart2/source/tools/RegressionCurveCalculator.cxx b/chart2/source/tools/RegressionCurveCalculator.cxx index a71e607e9f70..ff2f4d13a896 100644 --- a/chart2/source/tools/RegressionCurveCalculator.cxx +++ b/chart2/source/tools/RegressionCurveCalculator.cxx @@ -37,17 +37,15 @@ namespace chart { RegressionCurveCalculator::RegressionCurveCalculator() - : m_fCorrelationCoefficient(0.0) + : m_fCorrelationCoefficient(std::numeric_limits<double>::quiet_NaN()) , mDegree(2) , mForceIntercept(false) - , mInterceptValue(0.0) + , mInterceptValue(std::numeric_limits<double>::quiet_NaN()) , mPeriod(2) , mXName("x") , mYName("f(x)") , mnMovingType(0) { - rtl::math::setNan( &m_fCorrelationCoefficient ); - rtl::math::setNan( &mInterceptValue ); } RegressionCurveCalculator::~RegressionCurveCalculator() diff --git a/chart2/source/tools/Scaling.cxx b/chart2/source/tools/Scaling.cxx index e10757928a99..b49dab6d6fb9 100644 --- a/chart2/source/tools/Scaling.cxx +++ b/chart2/source/tools/Scaling.cxx @@ -18,10 +18,12 @@ */ #include <Scaling.hxx> -#include <rtl/math.hxx> #include <com/sun/star/uno/RuntimeException.hpp> #include <cppuhelper/supportsservice.hxx> +#include <cmath> +#include <limits> + namespace com::sun::star::uno { class XComponentContext; } namespace @@ -57,12 +59,9 @@ LogarithmicScaling::~LogarithmicScaling() double SAL_CALL LogarithmicScaling::doScaling( double value ) { - double fResult; if( std::isnan( value ) || std::isinf( value ) ) - ::rtl::math::setNan( & fResult ); - else - fResult = log( value ) / m_fLogOfBase; - return fResult; + return std::numeric_limits<double>::quiet_NaN(); + return std::log( value ) / m_fLogOfBase; } uno::Reference< XScaling > SAL_CALL LogarithmicScaling::getInverseScaling() @@ -106,12 +105,9 @@ ExponentialScaling::~ExponentialScaling() double SAL_CALL ExponentialScaling::doScaling( double value ) { - double fResult; if( std::isnan( value ) || std::isinf( value ) ) - ::rtl::math::setNan( & fResult ); - else - fResult = pow( m_fBase, value ); - return fResult; + return std::numeric_limits<double>::quiet_NaN(); + return std::pow( m_fBase, value ); } uno::Reference< XScaling > SAL_CALL ExponentialScaling::getInverseScaling() @@ -154,12 +150,9 @@ LinearScaling::~LinearScaling() double SAL_CALL LinearScaling::doScaling( double value ) { - double fResult; if( std::isnan( value ) || std::isinf( value ) ) - ::rtl::math::setNan( & fResult ); - else - fResult = m_fOffset + m_fSlope * value; - return fResult; + return std::numeric_limits<double>::quiet_NaN(); + return m_fOffset + m_fSlope * value; } uno::Reference< XScaling > SAL_CALL @@ -205,12 +198,9 @@ PowerScaling::~PowerScaling() double SAL_CALL PowerScaling::doScaling( double value ) { - double fResult; if( std::isnan( value ) || std::isinf( value ) ) - ::rtl::math::setNan( & fResult ); - else - fResult = pow( value, m_fExponent ); - return fResult; + return std::numeric_limits<double>::quiet_NaN(); + return std::pow( value, m_fExponent ); } uno::Reference< XScaling > SAL_CALL diff --git a/chart2/source/tools/StatisticsHelper.cxx b/chart2/source/tools/StatisticsHelper.cxx index ef9c141208a1..332843aaa307 100644 --- a/chart2/source/tools/StatisticsHelper.cxx +++ b/chart2/source/tools/StatisticsHelper.cxx @@ -22,7 +22,6 @@ #include <ErrorBar.hxx> #include <unonames.hxx> -#include <rtl/math.hxx> #include <rtl/ustrbuf.hxx> #include <comphelper/processfactory.hxx> #include <com/sun/star/chart2/XDataSeries.hpp> @@ -33,6 +32,9 @@ #include <com/sun/star/chart/ErrorBarStyle.hpp> #include <tools/diagnose_ex.h> +#include <cmath> +#include <limits> + using ::com::sun::star::uno::Sequence; using ::com::sun::star::uno::Reference; using namespace ::com::sun::star; @@ -60,16 +62,11 @@ double lcl_getVariance( const Sequence< double > & rData, sal_Int32 & rOutValidC } } - double fResult; if( rOutValidCount == 0 ) - ::rtl::math::setNan( & fResult ); - else - { - const double fN = static_cast< double >( rOutValidCount ); - fResult = (fQuadSum - fSum*fSum/fN) / fN; - } + return std::numeric_limits<double>::quiet_NaN(); - return fResult; + const double fN = static_cast< double >( rOutValidCount ); + return (fQuadSum - fSum*fSum/fN) / fN; } Reference< chart2::data::XLabeledDataSequence > lcl_getErrorBarLabeledSequence( @@ -183,20 +180,11 @@ double StatisticsHelper::getStandardError( const Sequence< double > & rData ) { sal_Int32 nValCount; double fVar = lcl_getVariance( rData, nValCount ); - double fResult; - - if( nValCount == 0 || - std::isnan( fVar )) - { - ::rtl::math::setNan( & fResult ); - } - else - { - // standard-deviation / sqrt(n) - fResult = sqrt( fVar ) / sqrt( double(nValCount) ); - } - return fResult; + if( nValCount == 0 || std::isnan( fVar )) + return std::numeric_limits<double>::quiet_NaN(); + // standard-deviation / sqrt(n) + return sqrt( fVar ) / sqrt( double(nValCount) ); } Reference< chart2::data::XLabeledDataSequence > StatisticsHelper::getErrorLabeledDataSequenceFromDataSource( @@ -238,8 +226,7 @@ double StatisticsHelper::getErrorFromDataSource( bool bPositiveValue, bool bYError /* = true */ ) { - double fResult = 0.0; - ::rtl::math::setNan( & fResult ); + double fResult = std::numeric_limits<double>::quiet_NaN(); Reference< chart2::data::XDataSequence > xValues( StatisticsHelper::getErrorDataSequenceFromDataSource( xDataSource, bPositiveValue, bYError )); diff --git a/chart2/source/view/axes/DateScaling.cxx b/chart2/source/view/axes/DateScaling.cxx index a926b5a43c51..6f352c486517 100644 --- a/chart2/source/view/axes/DateScaling.cxx +++ b/chart2/source/view/axes/DateScaling.cxx @@ -22,6 +22,8 @@ #include <rtl/math.hxx> #include <cppuhelper/supportsservice.hxx> +#include <limits> + namespace { @@ -55,7 +57,7 @@ double SAL_CALL DateScaling::doScaling( double value ) { double fResult(value); if( std::isnan( value ) || std::isinf( value ) ) - ::rtl::math::setNan( & fResult ); + return std::numeric_limits<double>::quiet_NaN(); else { Date aDate(m_aNullDate); @@ -131,7 +133,7 @@ double SAL_CALL InverseDateScaling::doScaling( double value ) { double fResult(value); if( std::isnan( value ) || std::isinf( value ) ) - ::rtl::math::setNan( & fResult ); + return std::numeric_limits<double>::quiet_NaN(); else { switch( m_nTimeUnit ) diff --git a/chart2/source/view/axes/MinimumAndMaximumSupplier.cxx b/chart2/source/view/axes/MinimumAndMaximumSupplier.cxx index 2c9264786edf..422d08e64029 100644 --- a/chart2/source/view/axes/MinimumAndMaximumSupplier.cxx +++ b/chart2/source/view/axes/MinimumAndMaximumSupplier.cxx @@ -23,6 +23,8 @@ #include <rtl/math.hxx> +#include <limits> + namespace chart { using namespace ::com::sun::star; @@ -56,7 +58,7 @@ double MergedMinimumAndMaximumSupplier::getMinimumX() fGlobalExtremum=fLocalExtremum; } if(std::isinf(fGlobalExtremum)) - ::rtl::math::setNan(&fGlobalExtremum); + return std::numeric_limits<double>::quiet_NaN(); return fGlobalExtremum; } @@ -71,7 +73,7 @@ double MergedMinimumAndMaximumSupplier::getMaximumX() fGlobalExtremum=fLocalExtremum; } if(std::isinf(fGlobalExtremum)) - ::rtl::math::setNan(&fGlobalExtremum); + return std::numeric_limits<double>::quiet_NaN(); return fGlobalExtremum; } @@ -86,7 +88,7 @@ double MergedMinimumAndMaximumSupplier::getMinimumYInRange( double fMinimumX, do fGlobalExtremum=fLocalExtremum; } if(std::isinf(fGlobalExtremum)) - ::rtl::math::setNan(&fGlobalExtremum); + return std::numeric_limits<double>::quiet_NaN(); return fGlobalExtremum; } @@ -101,7 +103,7 @@ double MergedMinimumAndMaximumSupplier::getMaximumYInRange( double fMinimumX, do fGlobalExtremum=fLocalExtremum; } if(std::isinf(fGlobalExtremum)) - ::rtl::math::setNan(&fGlobalExtremum); + return std::numeric_limits<double>::quiet_NaN(); return fGlobalExtremum; } @@ -116,7 +118,7 @@ double MergedMinimumAndMaximumSupplier::getMinimumZ() fGlobalExtremum=fLocalExtremum; } if(std::isinf(fGlobalExtremum)) - ::rtl::math::setNan(&fGlobalExtremum); + return std::numeric_limits<double>::quiet_NaN(); return fGlobalExtremum; } @@ -131,7 +133,7 @@ double MergedMinimumAndMaximumSupplier::getMaximumZ() fGlobalExtremum=fLocalExtremum; } if(std::isinf(fGlobalExtremum)) - ::rtl::math::setNan(&fGlobalExtremum); + return std::numeric_limits<double>::quiet_NaN(); return fGlobalExtremum; } diff --git a/chart2/source/view/axes/ScaleAutomatism.cxx b/chart2/source/view/axes/ScaleAutomatism.cxx index 7557f9b3d95b..f433a6bd076b 100644 --- a/chart2/source/view/axes/ScaleAutomatism.cxx +++ b/chart2/source/view/axes/ScaleAutomatism.cxx @@ -109,8 +109,8 @@ ScaleAutomatism::ScaleAutomatism( const ScaleData& rSourceScale, const Date& rNu void ScaleAutomatism::resetValueRange( ) { - ::rtl::math::setNan( &m_fValueMinimum ); - ::rtl::math::setNan( &m_fValueMaximum ); + m_fValueMinimum = std::numeric_limits<double>::quiet_NaN(); + m_fValueMaximum = std::numeric_limits<double>::quiet_NaN(); } void ScaleAutomatism::expandValueRange( double fMinimum, double fMaximum ) diff --git a/chart2/source/view/axes/VCartesianAxis.cxx b/chart2/source/view/axes/VCartesianAxis.cxx index fcb3391c693c..e2b983d7d63a 100644 --- a/chart2/source/view/axes/VCartesianAxis.cxx +++ b/chart2/source/view/axes/VCartesianAxis.cxx @@ -44,6 +44,7 @@ #include <basegfx/numeric/ftools.hxx> #include <algorithm> +#include <limits> #include <memory> using namespace ::com::sun::star; @@ -1109,18 +1110,15 @@ double VCartesianAxis::getLabelLineIntersectionValue() const double VCartesianAxis::getExtraLineIntersectionValue() const { - double fNan; - rtl::math::setNan(&fNan); - if( !m_aAxisProperties.m_pfExrtaLinePositionAtOtherAxis ) - return fNan; + return std::numeric_limits<double>::quiet_NaN(); double fMin = (m_nDimensionIndex==1) ? m_pPosHelper->getLogicMinX() : m_pPosHelper->getLogicMinY(); double fMax = (m_nDimensionIndex==1) ? m_pPosHelper->getLogicMaxX() : m_pPosHelper->getLogicMaxY(); if( *m_aAxisProperties.m_pfExrtaLinePositionAtOtherAxis <= fMin || *m_aAxisProperties.m_pfExrtaLinePositionAtOtherAxis >= fMax ) - return fNan; + return std::numeric_limits<double>::quiet_NaN(); return *m_aAxisProperties.m_pfExrtaLinePositionAtOtherAxis; } diff --git a/chart2/source/view/charttypes/AreaChart.cxx b/chart2/source/view/charttypes/AreaChart.cxx index 9421e94e6e9e..37b90cdfdbc0 100644 --- a/chart2/source/view/charttypes/AreaChart.cxx +++ b/chart2/source/view/charttypes/AreaChart.cxx @@ -36,7 +36,6 @@ #include <com/sun/star/chart/DataLabelPlacement.hpp> #include <com/sun/star/chart/MissingValueTreatment.hpp> -#include <rtl/math.hxx> #include <sal/log.hxx> #include <osl/diagnose.h> @@ -45,10 +44,11 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <officecfg/Office/Compatibility.hxx> +#include <limits> + namespace chart { using namespace ::com::sun::star; -using namespace ::rtl::math; using namespace ::com::sun::star::chart2; AreaChart::AreaChart( const uno::Reference<XChartType>& xChartTypeModel @@ -589,10 +589,10 @@ struct FormerPoint : m_fX(fX), m_fY(fY), m_fZ(fZ) {} FormerPoint() + : m_fX(std::numeric_limits<double>::quiet_NaN()) + , m_fY(std::numeric_limits<double>::quiet_NaN()) + , m_fZ(std::numeric_limits<double>::quiet_NaN()) { - ::rtl::math::setNan( &m_fX ); - ::rtl::math::setNan( &m_fY ); - ::rtl::math::setNan( &m_fZ ); } double m_fX; diff --git a/chart2/source/view/charttypes/BarChart.cxx b/chart2/source/view/charttypes/BarChart.cxx index ccdb6a9bc58d..02532136b075 100644 --- a/chart2/source/view/charttypes/BarChart.cxx +++ b/chart2/source/view/charttypes/BarChart.cxx @@ -394,11 +394,11 @@ struct FormerBarPoint : m_fX(fX), m_fUpperY(fUpperY), m_fLowerY(fLowerY), m_fZ(fZ) {} FormerBarPoint() + : m_fX(std::numeric_limits<double>::quiet_NaN()) + , m_fUpperY(std::numeric_limits<double>::quiet_NaN()) + , m_fLowerY(std::numeric_limits<double>::quiet_NaN()) + , m_fZ(std::numeric_limits<double>::quiet_NaN()) { - ::rtl::math::setNan( &m_fX ); - ::rtl::math::setNan( &m_fUpperY ); - ::rtl::math::setNan( &m_fLowerY ); - ::rtl::math::setNan( &m_fZ ); } double m_fX; diff --git a/chart2/source/view/charttypes/BubbleChart.cxx b/chart2/source/view/charttypes/BubbleChart.cxx index 9ad349b9f455..d5141be5cb58 100644 --- a/chart2/source/view/charttypes/BubbleChart.cxx +++ b/chart2/source/view/charttypes/BubbleChart.cxx @@ -24,16 +24,16 @@ #include <LabelPositionHelper.hxx> #include <com/sun/star/chart/DataLabelPlacement.hpp> -#include <rtl/math.hxx> #include <sal/log.hxx> #include <osl/diagnose.h> #include <com/sun/star/drawing/XShapes.hpp> #include <com/sun/star/beans/XPropertySet.hpp> +#include <limits> + namespace chart { using namespace ::com::sun::star; -using namespace ::rtl::math; using namespace ::com::sun::star::chart2; BubbleChart::BubbleChart( const uno::Reference<XChartType>& xChartTypeModel @@ -145,10 +145,10 @@ struct FormerPoint : m_fX(fX), m_fY(fY), m_fZ(fZ) {} FormerPoint() + : m_fX(std::numeric_limits<double>::quiet_NaN()) + , m_fY(std::numeric_limits<double>::quiet_NaN()) + , m_fZ(std::numeric_limits<double>::quiet_NaN()) { - ::rtl::math::setNan( &m_fX ); - ::rtl::math::setNan( &m_fY ); - ::rtl::math::setNan( &m_fZ ); } double m_fX; diff --git a/chart2/source/view/charttypes/NetChart.cxx b/chart2/source/view/charttypes/NetChart.cxx index da270d37de48..2db1dd5512ae 100644 --- a/chart2/source/view/charttypes/NetChart.cxx +++ b/chart2/source/view/charttypes/NetChart.cxx @@ -32,16 +32,16 @@ #include <com/sun/star/chart/DataLabelPlacement.hpp> #include <com/sun/star/chart/MissingValueTreatment.hpp> -#include <rtl/math.hxx> #include <osl/diagnose.h> #include <com/sun/star/drawing/XShapes.hpp> #include <officecfg/Office/Compatibility.hxx> +#include <limits> + namespace chart { using namespace ::com::sun::star; -using namespace ::rtl::math; using namespace ::com::sun::star::chart2; NetChart::NetChart( const uno::Reference<XChartType>& xChartTypeModel @@ -301,10 +301,11 @@ struct FormerPoint : m_fX(fX), m_fY(fY), m_fZ(fZ) {} FormerPoint() + : m_fX(std::numeric_limits<double>::quiet_NaN()) + , m_fY(std::numeric_limits<double>::quiet_NaN()) + , m_fZ(std::numeric_limits<double>::quiet_NaN()) + { - ::rtl::math::setNan( &m_fX ); - ::rtl::math::setNan( &m_fY ); - ::rtl::math::setNan( &m_fZ ); } double m_fX; diff --git a/chart2/source/view/charttypes/PieChart.cxx b/chart2/source/view/charttypes/PieChart.cxx index e77a7964ee71..08f94d00f513 100644 --- a/chart2/source/view/charttypes/PieChart.cxx +++ b/chart2/source/view/charttypes/PieChart.cxx @@ -34,12 +34,12 @@ #include <com/sun/star/drawing/XShape.hpp> #include <com/sun/star/drawing/XShapes.hpp> #include <com/sun/star/beans/XPropertySet.hpp> -#include <rtl/math.hxx> #include <sal/log.hxx> #include <osl/diagnose.h> #include <tools/diagnose_ex.h> #include <tools/helpers.hxx> +#include <limits> #include <memory> using namespace ::com::sun::star; @@ -198,9 +198,8 @@ PieChart::PieChart( const uno::Reference<XChartType>& xChartTypeModel , m_pPosHelper( new PiePositionHelper( (m_nDimension==3) ? 0.0 : 90.0 ) ) , m_bUseRings(false) , m_bSizeExcludesLabelsAndExplodedSegments(bExcludingPositioning) + , m_fMaxOffset(std::numeric_limits<double>::quiet_NaN()) { - ::rtl::math::setNan(&m_fMaxOffset); - PlotterBase::m_pPosHelper = m_pPosHelper.get(); VSeriesPlotter::m_pMainPosHelper = m_pPosHelper.get(); m_pPosHelper->m_fRadiusOffset = 0.0; @@ -711,7 +710,7 @@ void PieChart::createShapes() nExplodeableSlot = m_aZSlots.front().size()-1; m_aLabelInfoList.clear(); - ::rtl::math::setNan(&m_fMaxOffset); + m_fMaxOffset = std::numeric_limits<double>::quiet_NaN(); sal_Int32 n3DRelativeHeight = 100; uno::Reference< beans::XPropertySet > xPropertySet( m_xChartTypeModel, uno::UNO_QUERY ); if ( (m_nDimension==3) && xPropertySet.is()) diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx index 2c62b46cc678..f69bb8a10dd7 100644 --- a/chart2/source/view/charttypes/VSeriesPlotter.cxx +++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <limits> #include <memory> #include <VSeriesPlotter.hxx> #include <BaseGFXHelper.hxx> @@ -808,8 +809,7 @@ double lcl_getErrorBarLogicLength( bool bPositive, bool bYError ) { - double fResult; - ::rtl::math::setNan( & fResult ); + double fResult = std::numeric_limits<double>::quiet_NaN(); try { switch( nErrorBarStyle ) @@ -1726,7 +1726,7 @@ double VSeriesPlotter::getMinimumYInRange( double fMinimumX, double fMaximumX, s } } if(std::isinf(fMinimum)) - ::rtl::math::setNan(&fMinimum); + return std::numeric_limits<double>::quiet_NaN(); return fMinimum; } @@ -1759,7 +1759,7 @@ double VSeriesPlotter::getMaximumYInRange( double fMinimumX, double fMaximumX, s } } if(std::isinf(fMaximum)) - ::rtl::math::setNan(&fMaximum); + return std::numeric_limits<double>::quiet_NaN(); return fMaximum; } @@ -1833,9 +1833,9 @@ void VSeriesPlotter::getMinimumAndMaximumX( double& rfMinimum, double& rfMaximum } } if(std::isinf(rfMinimum)) - ::rtl::math::setNan(&rfMinimum); + rfMinimum = std::numeric_limits<double>::quiet_NaN(); if(std::isinf(rfMaximum)) - ::rtl::math::setNan(&rfMaximum); + rfMaximum = std::numeric_limits<double>::quiet_NaN(); } void VSeriesPlotter::getMinimumAndMaximumYInContinuousXRange( double& rfMinY, double& rfMaxY, double fMinX, double fMaxX, sal_Int32 nAxisIndex ) const @@ -1856,9 +1856,9 @@ void VSeriesPlotter::getMinimumAndMaximumYInContinuousXRange( double& rfMinY, do } } if(std::isinf(rfMinY)) - ::rtl::math::setNan(&rfMinY); + rfMinY = std::numeric_limits<double>::quiet_NaN(); if(std::isinf(rfMaxY)) - ::rtl::math::setNan(&rfMaxY); + rfMaxY = std::numeric_limits<double>::quiet_NaN(); } sal_Int32 VSeriesPlotter::getPointCount() const @@ -1944,9 +1944,9 @@ void VDataSeriesGroup::getMinimumAndMaximumX( double& rfMinimum, double& rfMaxim } } if(std::isinf(rfMinimum)) - ::rtl::math::setNan(&rfMinimum); + rfMinimum = std::numeric_limits<double>::quiet_NaN(); if(std::isinf(rfMaximum)) - ::rtl::math::setNan(&rfMaximum); + rfMaximum = std::numeric_limits<double>::quiet_NaN(); } namespace { @@ -2007,14 +2007,15 @@ public: void getTotalRange(double& rfMin, double& rfMax) const { - rtl::math::setNan(&rfMin); - rtl::math::setNan(&rfMax); - TotalStoreType aStore; getTotalStore(aStore); if (aStore.empty()) + { + rfMin = std::numeric_limits<double>::quiet_NaN(); + rfMax = std::numeric_limits<double>::quiet_NaN(); return; + } TotalStoreType::const_iterator it = aStore.begin(), itEnd = aStore.end(); rfMin = it->second.first; @@ -2085,8 +2086,8 @@ private: void VDataSeriesGroup::getMinimumAndMaximumYInContinuousXRange( double& rfMinY, double& rfMaxY, double fMinX, double fMaxX, sal_Int32 nAxisIndex ) const { - ::rtl::math::setNan(&rfMinY); - ::rtl::math::setNan(&rfMaxY); + rfMinY = std::numeric_limits<double>::quiet_NaN(); + rfMaxY = std::numeric_limits<double>::quiet_NaN(); if (m_aSeriesVector.empty()) // No data series. Bail out. @@ -2145,12 +2146,11 @@ void VDataSeriesGroup::calculateYMinAndMaxForCategory( sal_Int32 nCategoryIndex return; } - double fTotalSum, fPositiveSum, fNegativeSum, fFirstPositiveY, fFirstNegativeY; - ::rtl::math::setNan( &fTotalSum ); - ::rtl::math::setNan( &fPositiveSum ); - ::rtl::math::setNan( &fNegativeSum ); - ::rtl::math::setNan( &fFirstPositiveY ); - ::rtl::math::setNan( &fFirstNegativeY ); + double fTotalSum = std::numeric_limits<double>::quiet_NaN(); + double fPositiveSum = std::numeric_limits<double>::quiet_NaN(); + double fNegativeSum = std::numeric_limits<double>::quiet_NaN(); + double fFirstPositiveY = std::numeric_limits<double>::quiet_NaN(); + double fFirstNegativeY = std::numeric_limits<double>::quiet_NaN(); if( bSeparateStackingForDifferentSigns ) { @@ -2233,8 +2233,8 @@ void VDataSeriesGroup::calculateYMinAndMaxForCategoryRange( nEndCategoryIndex=0; for( sal_Int32 nCatIndex = nStartCategoryIndex; nCatIndex <= nEndCategoryIndex; nCatIndex++ ) { - double fMinimumY; ::rtl::math::setNan(&fMinimumY); - double fMaximumY; ::rtl::math::setNan(&fMaximumY); + double fMinimumY = std::numeric_limits<double>::quiet_NaN(); + double fMaximumY = std::numeric_limits<double>::quiet_NaN(); calculateYMinAndMaxForCategory( nCatIndex , bSeparateStackingForDifferentSigns, fMinimumY, fMaximumY, nAxisIndex ); diff --git a/chart2/source/view/main/VDataSeries.cxx b/chart2/source/view/main/VDataSeries.cxx index 247fe41a2d27..87abdb2810c8 100644 --- a/chart2/source/view/main/VDataSeries.cxx +++ b/chart2/source/view/main/VDataSeries.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <limits> #include <memory> #include <VDataSeries.hxx> #include <ObjectIdentifier.hxx> @@ -67,12 +68,7 @@ double VDataSequence::getValue( sal_Int32 index ) const { if( 0<=index && index<Doubles.getLength() ) return Doubles[index]; - else - { - double fNan; - ::rtl::math::setNan( & fNan ); - return fNan; - } + return std::numeric_limits<double>::quiet_NaN(); } sal_Int32 VDataSequence::detectNumberFormatKey( sal_Int32 index ) const @@ -152,8 +148,8 @@ VDataSeries::VDataSeries( const uno::Reference< XDataSeries >& xDataSeries ) , m_pValueSequenceForDataLabelNumberFormatDetection(&m_aValues_Y) - , m_fXMeanValue(1.0) - , m_fYMeanValue(1.0) + , m_fXMeanValue(std::numeric_limits<double>::quiet_NaN()) + , m_fYMeanValue(std::numeric_limits<double>::quiet_NaN()) , m_aAttributedDataPointIndexList() @@ -171,9 +167,6 @@ VDataSeries::VDataSeries( const uno::Reference< XDataSeries >& xDataSeries ) , mpOldSeries(nullptr) , mnPercent(0.0) { - ::rtl::math::setNan( & m_fXMeanValue ); - ::rtl::math::setNan( & m_fYMeanValue ); - uno::Reference<data::XDataSource> xDataSource( xDataSeries, uno::UNO_QUERY ); uno::Sequence< uno::Reference< @@ -272,14 +265,14 @@ void VDataSeries::doSortByXValues() //prepare a vector for sorting std::vector< std::vector< double > > aTmp;//outer vector are points, inner vector are the different values of the point - double fNan; - ::rtl::math::setNan( & fNan ); sal_Int32 nPointIndex = 0; for( nPointIndex=0; nPointIndex < m_nPointCount; nPointIndex++ ) { aTmp.push_back( - { ((nPointIndex < m_aValues_X.Doubles.getLength()) ? m_aValues_X.Doubles[nPointIndex] : fNan), - ((nPointIndex < m_aValues_Y.Doubles.getLength()) ? m_aValues_Y.Doubles[nPointIndex] : fNan) + { ((nPointIndex < m_aValues_X.Doubles.getLength()) ? m_aValues_X.Doubles[nPointIndex] + : std::numeric_limits<double>::quiet_NaN()), + ((nPointIndex < m_aValues_Y.Doubles.getLength()) ? m_aValues_Y.Doubles[nPointIndex] + : std::numeric_limits<double>::quiet_NaN()) } ); } @@ -435,7 +428,7 @@ void VDataSeries::setAttachedAxisIndex( sal_Int32 nAttachedAxisIndex ) double VDataSeries::getXValue( sal_Int32 index ) const { - double fRet = 0.0; + double fRet = std::numeric_limits<double>::quiet_NaN(); if(m_aValues_X.is()) { if( 0<=index && index<m_aValues_X.getLength() ) @@ -447,16 +440,12 @@ double VDataSeries::getXValue( sal_Int32 index ) const fRet = nOldVal + (fRet - nOldVal) * mnPercent; } } - else - ::rtl::math::setNan( &fRet ); } else { // #i70133# always return correct X position - needed for short data series if( 0<=index /*&& index < m_nPointCount*/ ) fRet = index+1;//first category (index 0) matches with real number 1.0 - else - ::rtl::math::setNan( &fRet ); } lcl_maybeReplaceNanWithZero( fRet, getMissingValueTreatment() ); return fRet; @@ -464,7 +453,7 @@ double VDataSeries::getXValue( sal_Int32 index ) const double VDataSeries::getYValue( sal_Int32 index ) const { - double fRet = 0.0; + double fRet = std::numeric_limits<double>::quiet_NaN(); if(m_aValues_Y.is()) { if( 0<=index && index<m_aValues_Y.getLength() ) @@ -476,16 +465,12 @@ double VDataSeries::getYValue( sal_Int32 index ) const fRet = nOldVal + (fRet - nOldVal) * mnPercent; } } - else - ::rtl::math::setNan( &fRet ); } else { // #i70133# always return correct X position - needed for short data series if( 0<=index /*&& index < m_nPointCount*/ ) fRet = index+1;//first category (index 0) matches with real number 1.0 - else - ::rtl::math::setNan( &fRet ); } lcl_maybeReplaceNanWithZero( fRet, getMissingValueTreatment() ); return fRet; @@ -493,8 +478,8 @@ double VDataSeries::getYValue( sal_Int32 index ) const void VDataSeries::getMinMaxXValue(double& fMin, double& fMax) const { - rtl::math::setNan( &fMax ); - rtl::math::setNan( &fMin ); + fMax = std::numeric_limits<double>::quiet_NaN(); + fMin = std::numeric_limits<double>::quiet_NaN(); uno::Sequence< double > aValuesX = getAllX(); @@ -701,7 +686,7 @@ double VDataSeries::getMinimumofAllDifferentYValues( sal_Int32 index ) const } if( std::isinf(fMin) ) - ::rtl::math::setNan(&fMin); + return std::numeric_limits<double>::quiet_NaN(); return fMin; } @@ -737,7 +722,7 @@ double VDataSeries::getMaximumofAllDifferentYValues( sal_Int32 index ) const } if( std::isinf(fMax) ) - ::rtl::math::setNan(&fMax); + return std::numeric_limits<double>::quiet_NaN(); return fMax; } @@ -1112,11 +1097,7 @@ double VDataSeries::getValueByProperty( sal_Int32 nIndex, const OUString& rPropN { auto const itr = m_PropertyMap.find(rPropName); if (itr == m_PropertyMap.end()) - { - double fNan; - ::rtl::math::setNan( &fNan ); - return fNan; - } + return std::numeric_limits<double>::quiet_NaN(); const VDataSequence* pData = &itr->second; double fValue = pData->getValue(nIndex); diff --git a/dbaccess/source/core/misc/DatabaseDataProvider.cxx b/dbaccess/source/core/misc/DatabaseDataProvider.cxx index 2098f513f343..6a050770d8a0 100644 --- a/dbaccess/source/core/misc/DatabaseDataProvider.cxx +++ b/dbaccess/source/core/misc/DatabaseDataProvider.cxx @@ -738,11 +738,7 @@ void DatabaseDataProvider::impl_fillInternalDataProvider_throw(bool _bHasCategor aValue.fill( column.nResultSetPosition, column.nDataType, xRow ); if ( aValue.isNull() ) - { - double nValue; - ::rtl::math::setNan( &nValue ); - aRow.push_back( nValue ); - } + aRow.push_back( std::numeric_limits<double>::quiet_NaN() ); else aRow.push_back( aValue.getDouble() ); } diff --git a/include/formula/errorcodes.hxx b/include/formula/errorcodes.hxx index 12696bb0579d..1a96a0c70223 100644 --- a/include/formula/errorcodes.hxx +++ b/include/formula/errorcodes.hxx @@ -24,6 +24,8 @@ #include <sal/mathconf.h> #include <sal/types.h> +#include <limits> + // Store as 16-bits, since error values are stored in tokens and formula results, // and that can matter enum class FormulaError : sal_uInt16 @@ -96,7 +98,7 @@ enum class FormulaError : sal_uInt16 inline double CreateDoubleError( FormulaError nErr ) { sal_math_Double smVal; - ::rtl::math::setNan( &smVal.value ); + smVal.value = std::numeric_limits<double>::quiet_NaN(); smVal.nan_parts.fraction_lo = static_cast<unsigned>(nErr); return smVal.value; } diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index 12a996a45161..2a0d335ca86b 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -27,6 +27,7 @@ #include <drawingml/chart/typegroupconverter.hxx> #include <cstdio> +#include <limits> #include <com/sun/star/awt/Gradient.hpp> #include <com/sun/star/chart/XChartDocument.hpp> @@ -104,7 +105,6 @@ #include <set> #include <unordered_set> -#include <rtl/math.hxx> #include <o3tl/temporary.hxx> #include <o3tl/sorted_vector.hxx> @@ -416,8 +416,6 @@ static void lcl_fillCategoriesIntoStringVector( static ::std::vector< double > lcl_getAllValuesFromSequence( const Reference< chart2::data::XDataSequence > & xSeq ) { - double fNan = 0.0; - ::rtl::math::setNan( &fNan ); ::std::vector< double > aResult; Reference< chart2::data::XNumericalDataSequence > xNumSeq( xSeq, uno::UNO_QUERY ); @@ -429,7 +427,7 @@ static ::std::vector< double > lcl_getAllValuesFromSequence( const Reference< ch else if( xSeq.is()) { Sequence< uno::Any > aAnies( xSeq->getData()); - aResult.resize( aAnies.getLength(), fNan ); + aResult.resize( aAnies.getLength(), std::numeric_limits<double>::quiet_NaN() ); for( sal_Int32 i=0; i<aAnies.getLength(); ++i ) aAnies[i] >>= aResult[i]; } diff --git a/sc/inc/PivotTableDataSequence.hxx b/sc/inc/PivotTableDataSequence.hxx index 09d43f09898f..43128b689b3c 100644 --- a/sc/inc/PivotTableDataSequence.hxx +++ b/sc/inc/PivotTableDataSequence.hxx @@ -22,7 +22,8 @@ #include <svl/lstner.hxx> #include <svl/itemprop.hxx> #include <cppuhelper/implbase.hxx> -#include <rtl/math.hxx> + +#include <limits> class ScDocument; @@ -44,12 +45,11 @@ struct ValueAndFormat sal_uInt32 m_nNumberFormat; explicit ValueAndFormat() - : m_fValue(0.0) + : m_fValue(std::numeric_limits<double>::quiet_NaN()) , m_aString() , m_eType(ValueType::Empty) , m_nNumberFormat(0) { - rtl::math::setNan(&m_fValue); } explicit ValueAndFormat(double fValue, sal_uInt32 nNumberFormat) @@ -60,12 +60,11 @@ struct ValueAndFormat {} explicit ValueAndFormat(OUString const & rString) - : m_fValue(0.0) + : m_fValue(std::numeric_limits<double>::quiet_NaN()) , m_aString(rString) , m_eType(ValueType::String) , m_nNumberFormat(0) { - rtl::math::setNan(&m_fValue); } }; diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 9a7a3e34d623..75e96eba3c70 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -90,6 +90,7 @@ #include <sfx2/sfxsids.hrc> #include <iostream> +#include <limits> #include <memory> #include <vector> @@ -2143,8 +2144,7 @@ void Test::testMatrix() pMat->PutDouble(2.3, 2, 1); pMat->PutDouble(-20, 2, 2); - double fNaN; - rtl::math::setNan(&fNaN); + static const double fNaN = std::numeric_limits<double>::quiet_NaN(); std::vector<double> aDoubles; pMat->GetDoubleArray(aDoubles); diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index 21217e9cbbe1..21ae683ae443 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -64,8 +64,6 @@ #include <memory> #include <numeric> -#include <math.h> - // factor from font size to optimal cell height (text width) #define SC_ROT_BREAK_FACTOR 6 @@ -2472,8 +2470,6 @@ bool appendToBlock( { svl::SharedStringPool& rPool = pDoc->GetSharedStringPool(); size_t nLenRemain = nArrayLen - nPos; - double fNan; - rtl::math::setNan(&fNan); for (sc::CellStoreType::iterator it = _it; it != itEnd; ++it) { @@ -2627,9 +2623,6 @@ copyFirstFormulaBlock( sc::FormulaGroupContext& rCxt, const sc::CellStoreType::iterator& itBlk, size_t nArrayLen, SCTAB nTab, SCCOL nCol ) { - double fNan; - rtl::math::setNan(&fNan); - size_t nLen = std::min(itBlk->size, nArrayLen); sc::formula_block::iterator it = sc::formula_block::begin(*itBlk->data); @@ -2661,7 +2654,8 @@ copyFirstFormulaBlock( if (!pNumArray) { rCxt.m_NumArrays.push_back( - std::make_unique<sc::FormulaGroupContext::NumArrayType>(nArrayLen, fNan)); + std::make_unique<sc::FormulaGroupContext::NumArrayType>(nArrayLen, + std::numeric_limits<double>::quiet_NaN())); pNumArray = rCxt.m_NumArrays.back().get(); } @@ -2741,9 +2735,6 @@ formula::VectorRefArray ScColumn::FetchVectorRefArray( SCROW nRow1, SCROW nRow2 // So temporarily block the discarding. ProtectFormulaGroupContext protectContext(&GetDoc()); - double fNan; - rtl::math::setNan(&fNan); - // We need to fetch all cell values from row 0 to nRow2 for caching purposes. sc::CellStoreType::iterator itBlk = maCells.begin(); switch (itBlk->type) @@ -2763,7 +2754,8 @@ formula::VectorRefArray ScColumn::FetchVectorRefArray( SCROW nRow1, SCROW nRow2 rCxt.m_NumArrays.push_back( std::make_unique<sc::FormulaGroupContext::NumArrayType>(it, itEnd)); sc::FormulaGroupContext::NumArrayType& rArray = *rCxt.m_NumArrays.back(); - rArray.resize(nRow2+1, fNan); // allocate to the requested length. + // allocate to the requested length. + rArray.resize(nRow2+1, std::numeric_limits<double>::quiet_NaN()); pColArray = rCxt.setCachedColArray(nTab, nCol, &rArray, nullptr); if (!pColArray) @@ -2877,7 +2869,8 @@ formula::VectorRefArray ScColumn::FetchVectorRefArray( SCROW nRow1, SCROW nRow2 { // Fill the whole length with NaN's. rCxt.m_NumArrays.push_back( - std::make_unique<sc::FormulaGroupContext::NumArrayType>(nRow2+1, fNan)); + std::make_unique<sc::FormulaGroupContext::NumArrayType>(nRow2+1, + std::numeric_limits<double>::quiet_NaN())); sc::FormulaGroupContext::NumArrayType& rArray = *rCxt.m_NumArrays.back(); pColArray = rCxt.setCachedColArray(nTab, nCol, &rArray, nullptr); if (!pColArray) diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx index deb9a8eaa6a1..7f85c52493cc 100644 --- a/sc/source/core/data/dociter.cxx +++ b/sc/source/core/data/dociter.cxx @@ -47,6 +47,7 @@ #include <osl/diagnose.h> #include <algorithm> +#include <limits> #include <vector> using ::rtl::math::approxEqual; @@ -745,10 +746,10 @@ bool ScDBQueryDataIterator::DataAccessMatrix::isValidQuery(SCROW nRow, const ScM return std::find(aResults.begin(), aResults.end(), true) != aResults.end(); } -ScDBQueryDataIterator::Value::Value() : - mnError(FormulaError::NONE), mbIsNumber(true) +ScDBQueryDataIterator::Value::Value() + : mfValue(std::numeric_limits<double>::quiet_NaN()) + , mnError(FormulaError::NONE), mbIsNumber(true) { - ::rtl::math::setNan(&mfValue); } ScDBQueryDataIterator::ScDBQueryDataIterator(ScDocument& rDocument, const ScInterpreterContext& rContext, std::unique_ptr<ScDBQueryParamBase> pParam) : diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx index d60b41d143e8..f3a494694003 100644 --- a/sc/source/core/data/dpobject.cxx +++ b/sc/source/core/data/dpobject.cxx @@ -1355,30 +1355,28 @@ public: double ScDPObject::GetPivotData(const OUString& rDataFieldName, std::vector<sheet::DataPilotFieldFilter>& rFilters) { - double fRet; - rtl::math::setNan(&fRet); if (!mbEnableGetPivotData) - return fRet; + return std::numeric_limits<double>::quiet_NaN(); CreateObjects(); std::vector<const ScDPSaveDimension*> aDataDims; pSaveData->GetAllDimensionsByOrientation(sheet::DataPilotFieldOrientation_DATA, aDataDims); if (aDataDims.empty()) - return fRet; + return std::numeric_limits<double>::quiet_NaN(); std::vector<const ScDPSaveDimension*>::iterator it = std::find_if( aDataDims.begin(), aDataDims.end(), FindByName(ScGlobal::getCharClassPtr()->uppercase(rDataFieldName))); if (it == aDataDims.end()) - return fRet; + return std::numeric_limits<double>::quiet_NaN(); size_t nDataIndex = std::distance(aDataDims.begin(), it); uno::Reference<sheet::XDataPilotResults> xDPResults(xSource, uno::UNO_QUERY); if (!xDPResults.is()) - return fRet; + return std::numeric_limits<double>::quiet_NaN(); // Dimensions must be sorted in order of appearance, and row dimensions // must come before column dimensions. @@ -1391,7 +1389,7 @@ double ScDPObject::GetPivotData(const OUString& rDataFieldName, std::vector<shee uno::Sequence<double> aRes = xDPResults->getFilteredResults(aFilters); if (static_cast<sal_Int32>(nDataIndex) >= aRes.getLength()) - return fRet; + return std::numeric_limits<double>::quiet_NaN(); return aRes[nDataIndex]; } diff --git a/sc/source/core/data/dpoutput.cxx b/sc/source/core/data/dpoutput.cxx index fe54b7c1086c..ca9b214b5605 100644 --- a/sc/source/core/data/dpoutput.cxx +++ b/sc/source/core/data/dpoutput.cxx @@ -58,6 +58,7 @@ #include <com/sun/star/sheet/XMembersAccess.hpp> #include <com/sun/star/sheet/XMembersSupplier.hpp> +#include <limits> #include <string_view> #include <vector> @@ -486,9 +487,7 @@ uno::Sequence<sheet::MemberResult> getVisiblePageMembersAsResults( const uno::Re if (bVisible) { /* TODO: any numeric value to obtain? */ - double fValue; - rtl::math::setNan(&fValue); - aRes.emplace_back(rName, aCaption, 0, fValue); + aRes.emplace_back(rName, aCaption, 0, std::numeric_limits<double>::quiet_NaN()); } } diff --git a/sc/source/core/data/dpresfilter.cxx b/sc/source/core/data/dpresfilter.cxx index 346cbef8b4f1..9c6c25413cf2 100644 --- a/sc/source/core/data/dpresfilter.cxx +++ b/sc/source/core/data/dpresfilter.cxx @@ -11,13 +11,14 @@ #include <global.hxx> #include <unotools/charclass.hxx> -#include <rtl/math.hxx> #include <sal/log.hxx> #include <o3tl/hash_combine.hxx> #include <com/sun/star/sheet/DataPilotFieldFilter.hpp> #include <com/sun/star/uno/Sequence.hxx> +#include <limits> + using namespace com::sun::star; using namespace std; @@ -171,7 +172,7 @@ void ScDPResultTree::add( else { // This name pair already exists. Set the value to NaN. - rtl::math::setNan(&it->second); + it->second = std::numeric_limits<double>::quiet_NaN(); } } @@ -259,9 +260,7 @@ double ScDPResultTree::getLeafResult(const css::sheet::DataPilotFieldFilter& rFi return it->second; // Not found. Return an NaN. - double fNan; - rtl::math::setNan(&fNan); - return fNan; + return std::numeric_limits<double>::quiet_NaN(); } #if DEBUG_PIVOT_TABLE diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx index b3d1d894dd2a..46311e3570a8 100644 --- a/sc/source/core/data/dptabres.cxx +++ b/sc/source/core/data/dptabres.cxx @@ -40,6 +40,7 @@ #include <math.h> #include <float.h> #include <algorithm> +#include <limits> #include <memory> #include <unordered_map> @@ -1335,8 +1336,7 @@ void ScDPResultMember::FillMemberResults( OSL_ENSURE( rPos+nSize <= pSequences->getLength(), "bumm" ); bool bIsNumeric = false; - double fValue; - rtl::math::setNan(&fValue); + double fValue = std::numeric_limits<double>::quiet_NaN(); OUString aName; if ( pMemberName ) // if pMemberName != NULL, use instead of real member name { @@ -1498,7 +1498,7 @@ void ScDPResultMember::FillMemberResults( } } - rtl::math::setNan(&fValue); /* TODO: any numeric value to obtain? */ + fValue = std::numeric_limits<double>::quiet_NaN(); /* TODO: any numeric value to obtain? */ pArray[rPos].Name = aName; pArray[rPos].Caption = aSubStr; pArray[rPos].Flags = ( pArray[rPos].Flags | diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index 92083e2a2cd1..9058a42c948a 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -17,7 +17,6 @@ #include <formula/vectortoken.hxx> #include <scmatrix.hxx> #include <sal/log.hxx> -#include <rtl/math.hxx> #include <opencl/openclwrapper.hxx> #include <opencl/OpenCLZone.hxx> @@ -31,6 +30,8 @@ #include "op_spreadsheet.hxx" #include "op_addin.hxx" +#include <limits> + #include <com/sun/star/sheet/FormulaLanguage.hpp> // FIXME: The idea that somebody would bother to (now and then? once a year? once a month?) manually @@ -322,7 +323,7 @@ size_t VectorRef::Marshal( cl_kernel k, int argno, int, cl_program ) throw OpenCLError("clEnqueueMapBuffer", err, __FILE__, __LINE__); for (size_t i = 0; i < szHostBuffer / sizeof(double); i++) - rtl::math::setNan(&pNanBuffer[i]); + pNanBuffer[i] = std::numeric_limits<double>::quiet_NaN(); err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpClmem, pNanBuffer, 0, nullptr, nullptr); // FIXME: Is it intentional to not throw an OpenCLError even if the clEnqueueUnmapMemObject() fails? diff --git a/sc/source/core/tool/formulagroup.cxx b/sc/source/core/tool/formulagroup.cxx index dacf97899839..f430c511ceed 100644 --- a/sc/source/core/tool/formulagroup.cxx +++ b/sc/source/core/tool/formulagroup.cxx @@ -23,6 +23,7 @@ #include <sal/log.hxx> #include <cstdio> +#include <limits> #include <unordered_map> #include <vector> @@ -118,11 +119,9 @@ void FormulaGroupContext::ensureNumArray( ColArray& rColArray, size_t nArrayLen if (rColArray.mpNumArray) return; - double fNan; - rtl::math::setNan(&fNan); - m_NumArrays.push_back( - std::make_unique<sc::FormulaGroupContext::NumArrayType>(nArrayLen, fNan)); + std::make_unique<sc::FormulaGroupContext::NumArrayType>(nArrayLen, + std::numeric_limits<double>::quiet_NaN())); rColArray.mpNumArray = m_NumArrays.back().get(); } diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index 288d01d2eacc..289c06b43323 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -3902,9 +3902,7 @@ double applyImplicitIntersection(const sc::RangeMatrix& rMat, const ScAddress& r return rMat.mpMat->GetDouble(nOffset, 0); } - double fVal; - rtl::math::setNan(&fVal); - return fVal; + return std::numeric_limits<double>::quiet_NaN(); } // Test for Functions that evaluate an error code and directly set nGlobalError to 0 diff --git a/sc/source/filter/oox/biffhelper.cxx b/sc/source/filter/oox/biffhelper.cxx index 11582c7e63ce..dadfd2014bea 100644 --- a/sc/source/filter/oox/biffhelper.cxx +++ b/sc/source/filter/oox/biffhelper.cxx @@ -23,6 +23,8 @@ #include <osl/diagnose.h> #include <oox/helper/binaryinputstream.hxx> +#include <limits> + namespace oox::xls { namespace { @@ -68,7 +70,7 @@ const sal_Int32 BIFF_RK_VALUEMASK = 0xFFFFFFFC; default: OSL_FAIL( "BiffHelper::calcDoubleFromError - unknown error code" ); } sal_math_Double aMathDouble; - ::rtl::math::setNan( &aMathDouble.value ); + aMathDouble.value = std::numeric_limits<double>::quiet_NaN(); aMathDouble.nan_parts.fraction_lo = nApiError; return aMathDouble.value; } diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx index 35fb72548a4c..b996449c8218 100644 --- a/sc/source/filter/orcus/interface.cxx +++ b/sc/source/filter/orcus/interface.cxx @@ -7,6 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <limits> #include <memory> #include <orcusinterface.hxx> @@ -259,11 +260,11 @@ void ScOrcusNamedExpression::commit() ScOrcusFactory::CellStoreToken::CellStoreToken(const ScAddress& rPos, Type eType) : maPos(rPos) , meType(eType) + , mfValue(std::numeric_limits<double>::quiet_NaN()) , mnIndex1(0) , mnIndex2(0) , meGrammar(formula::FormulaGrammar::GRAM_UNSPECIFIED) { - rtl::math::setNan(&mfValue); } ScOrcusFactory::CellStoreToken::CellStoreToken(const ScAddress& rPos, double fValue) @@ -279,11 +280,11 @@ ScOrcusFactory::CellStoreToken::CellStoreToken(const ScAddress& rPos, double fVa ScOrcusFactory::CellStoreToken::CellStoreToken(const ScAddress& rPos, uint32_t nIndex) : maPos(rPos) , meType(Type::String) + , mfValue(std::numeric_limits<double>::quiet_NaN()) , mnIndex1(nIndex) , mnIndex2(0) , meGrammar(formula::FormulaGrammar::GRAM_UNSPECIFIED) { - rtl::math::setNan(&mfValue); } ScOrcusFactory::CellStoreToken::CellStoreToken(const ScAddress& rPos, const OUString& rFormula, @@ -291,11 +292,11 @@ ScOrcusFactory::CellStoreToken::CellStoreToken(const ScAddress& rPos, const OUSt : maPos(rPos) , meType(Type::Formula) , maStr1(rFormula) + , mfValue(std::numeric_limits<double>::quiet_NaN()) , mnIndex1(0) , mnIndex2(0) , meGrammar(eGrammar) { - rtl::math::setNan(&mfValue); } ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc, bool bSkipDefaultStyles) : diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index 638c2c5cba67..cf346c63cd15 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <limits> #include <memory> #include "xmlcelli.hxx" #include "xmlimprt.hxx" @@ -117,7 +118,7 @@ ScXMLTableRowCellContext::ScXMLTableRowCellContext( ScXMLImport& rImport, ScXMLImportContext( rImport ), mpEditEngine(GetScImport().GetEditEngine()), mnCurParagraph(0), - fValue(0.0), + fValue(std::numeric_limits<double>::quiet_NaN()), nMergedRows(1), nMatrixRows(0), nRepeatedRows(nTempRepeatedRows), @@ -142,8 +143,6 @@ ScXMLTableRowCellContext::ScXMLTableRowCellContext( ScXMLImport& rImport, mbHasStyle(false), mbPossibleEmptyDisplay(false) { - rtl::math::setNan(&fValue); // NaN by default - rXMLImport.GetTables().AddColumn(bTempIsCovered); std::optional<OUString> xStyleName; diff --git a/sc/source/ui/miscdlgs/solveroptions.cxx b/sc/source/ui/miscdlgs/solveroptions.cxx index ff42d9a7d909..07d86f5a9ee5 100644 --- a/sc/source/ui/miscdlgs/solveroptions.cxx +++ b/sc/source/ui/miscdlgs/solveroptions.cxx @@ -373,8 +373,8 @@ ScSolverValueDialog::ScSolverValueDialog(weld::Window* pParent) : GenericDialogController(pParent, "modules/scalc/ui/doubledialog.ui", "DoubleDialog") , m_xFrame(m_xBuilder->weld_frame("frame")) , m_xEdValue(m_xBuilder->weld_entry("value")) + , m_fMaxValue(std::numeric_limits<double>::quiet_NaN()) { - ::rtl::math::setNan(&m_fMaxValue); } ScSolverValueDialog::~ScSolverValueDialog() diff --git a/sc/source/ui/unoobj/PivotTableDataProvider.cxx b/sc/source/ui/unoobj/PivotTableDataProvider.cxx index 9d167d862e0e..2971be908072 100644 --- a/sc/source/ui/unoobj/PivotTableDataProvider.cxx +++ b/sc/source/ui/unoobj/PivotTableDataProvider.cxx @@ -7,6 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <limits> #include <memory> #include <sal/config.h> @@ -287,9 +288,6 @@ void PivotTableDataProvider::collectPivotTableData() return; const uno::Sequence<uno::Sequence<sheet::DataResult>> xDataResultsSequence = xDPResults->getResults(); - double fNan; - rtl::math::setNan(&fNan); - std::unordered_set<size_t> aValidRowIndex; size_t nRowIndex = 0; @@ -304,7 +302,8 @@ void PivotTableDataProvider::collectPivotTableData() continue; if (rDataResult.Flags == 0 || rDataResult.Flags & css::sheet::DataResultFlags::HASDATA) { - aRow.emplace_back(rDataResult.Flags ? rDataResult.Value : fNan, 0); + aRow.emplace_back(rDataResult.Flags ? rDataResult.Value + : std::numeric_limits<double>::quiet_NaN(), 0); if (rDataResult.Flags != 0) // set as valid only if we have data { bRowEmpty = false; diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx index 3bcdf315db82..2f0461b39a5d 100644 --- a/sc/source/ui/unoobj/chart2uno.cxx +++ b/sc/source/ui/unoobj/chart2uno.cxx @@ -59,7 +59,7 @@ #include <comphelper/processfactory.hxx> #include <comphelper/sequence.hxx> -#include <rtl/math.hxx> +#include <limits> SC_SIMPLE_SERVICE_INFO( ScChart2DataProvider, "ScChart2DataProvider", "com.sun.star.chart2.data.DataProvider") @@ -2323,10 +2323,10 @@ void ScChart2DataSource::AddLabeledSequence(const uno::Reference < chart2::data: // DataSequence ============================================================== -ScChart2DataSequence::Item::Item() : - mfValue(0.0), mbIsValue(false) +ScChart2DataSequence::Item::Item() + : mfValue(std::numeric_limits<double>::quiet_NaN()) + , mbIsValue(false) { - ::rtl::math::setNan(&mfValue); } ScChart2DataSequence::HiddenRangeListener::HiddenRangeListener(ScChart2DataSequence& rParent) : @@ -2907,15 +2907,12 @@ uno::Sequence< double > SAL_CALL ScChart2DataSequence::getNumericalData() BuildDataCache(); - double fNAN; - ::rtl::math::setNan(&fNAN); - sal_Int32 nCount = m_aDataArray.size(); uno::Sequence<double> aSeq(nCount); double* pArr = aSeq.getArray(); for (const Item& rItem : m_aDataArray) { - *pArr = rItem.mbIsValue ? rItem.mfValue : fNAN; + *pArr = rItem.mbIsValue ? rItem.mfValue : std::numeric_limits<double>::quiet_NaN(); ++pArr; } diff --git a/svtools/source/table/cellvalueconversion.cxx b/svtools/source/table/cellvalueconversion.cxx index e209fe953104..76a0a1395ffd 100644 --- a/svtools/source/table/cellvalueconversion.cxx +++ b/svtools/source/table/cellvalueconversion.cxx @@ -27,7 +27,6 @@ #include <com/sun/star/util/DateTime.hpp> #include <com/sun/star/util/XNumberFormatTypes.hpp> #include <com/sun/star/util/NumberFormat.hpp> -#include <rtl/math.hxx> #include <sal/log.hxx> #include <tools/date.hxx> #include <tools/time.hxx> @@ -37,6 +36,7 @@ #include <i18nlangtag/languagetag.hxx> #include <comphelper/processfactory.hxx> +#include <limits> #include <memory> #include <unordered_map> @@ -152,8 +152,7 @@ namespace svt virtual double convertToDouble( Any const & i_value ) const override { - double returnValue(0); - ::rtl::math::setNan( &returnValue ); + double returnValue = std::numeric_limits<double>::quiet_NaN(); OSL_VERIFY( i_value >>= returnValue ); return returnValue; } @@ -210,8 +209,7 @@ namespace svt virtual double convertToDouble( Any const & i_value ) const override { - double returnValue(0); - ::rtl::math::setNan( &returnValue ); + double returnValue = std::numeric_limits<double>::quiet_NaN(); // extract actual UNO value DateTime aDateTimeValue; @@ -242,8 +240,7 @@ namespace svt virtual double convertToDouble( Any const & i_value ) const override { - double returnValue(0); - ::rtl::math::setNan( &returnValue ); + double returnValue = std::numeric_limits<double>::quiet_NaN(); // extract css::util::Date aDateValue; @@ -270,8 +267,7 @@ namespace svt virtual double convertToDouble( Any const & i_value ) const override { - double returnValue(0); - ::rtl::math::setNan( &returnValue ); + double returnValue = std::numeric_limits<double>::quiet_NaN(); // extract css::util::Time aTimeValue; diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index ee6c41b11911..611000eb9a03 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -22,6 +22,7 @@ #include <memory> #include <vector> #include <algorithm> +#include <limits> #include <cppuhelper/interfacecontainer.hxx> #include <o3tl/any.hxx> @@ -92,7 +93,6 @@ #include <SwStyleNameMapper.hxx> #include <frmatr.hxx> #include <sortopt.hxx> -#include <rtl/math.hxx> #include <sal/log.hxx> #include <editeng/frmdiritem.hxx> #include <comphelper/interfacecontainer2.hxx> @@ -885,12 +885,9 @@ double SwXCell::getValue() { SolarMutexGuard aGuard; // #i112652# a table cell may contain NaN as a value, do not filter that - double fRet; if(IsValid() && !getString().isEmpty()) - fRet = m_pBox->GetFrameFormat()->GetTableBoxValue().GetValue(); - else - ::rtl::math::setNan( &fRet ); - return fRet; + return m_pBox->GetFrameFormat()->GetTableBoxValue().GetValue(); + return std::numeric_limits<double>::quiet_NaN(); } void SwXCell::setValue(double rValue) @@ -1212,7 +1209,7 @@ double SwXCell::GetForcedNumericalValue() const } double fTmp; if (!const_cast<SwDoc*>(GetDoc())->IsNumberFormat(const_cast<SwXCell*>(this)->getString(), nFIndex, fTmp)) - ::rtl::math::setNan(&fTmp); + return std::numeric_limits<double>::quiet_NaN(); return fTmp; } diff --git a/vcl/source/control/fmtfield.cxx b/vcl/source/control/fmtfield.cxx index cb55d2ce158a..4c818c0d4d8c 100644 --- a/vcl/source/control/fmtfield.cxx +++ b/vcl/source/control/fmtfield.cxx @@ -33,6 +33,7 @@ #include <vcl/weld.hxx> #include <i18nlangtag/languagetag.hxx> #include <unotools/syslocale.hxx> +#include <limits> #include <map> #include <rtl/math.hxx> #include <rtl/ustrbuf.hxx> @@ -859,14 +860,7 @@ void Formatter::SetValue(double dVal) double Formatter::GetValue() { if ( !ImplGetValue( m_dCurrentValue ) ) - { - double dValue; - if (m_bEnableNaN) - ::rtl::math::setNan(&dValue); - else - dValue = m_dDefaultValue; - UpdateCurrentValue(dValue); - } + UpdateCurrentValue(m_bEnableNaN ? std::numeric_limits<double>::quiet_NaN() : m_dDefaultValue); m_ValueState = valueDouble; return m_dCurrentValue; diff --git a/xmloff/source/chart/SchXMLExport.cxx b/xmloff/source/chart/SchXMLExport.cxx index f418cebd4500..4d1596b04aa5 100644 --- a/xmloff/source/chart/SchXMLExport.cxx +++ b/xmloff/source/chart/SchXMLExport.cxx @@ -46,6 +46,7 @@ #include <rtl/math.hxx> #include <o3tl/sorted_vector.hxx> +#include <limits> #include <vector> #include <algorithm> #include <queue> @@ -629,8 +630,6 @@ uno::Sequence< OUString > lcl_DataSequenceToStringSequence( } ::std::vector< double > lcl_getAllValuesFromSequence( const Reference< chart2::data::XDataSequence > & xSeq ) { - double fNan = 0.0; - ::rtl::math::setNan( &fNan ); ::std::vector< double > aResult; if(!xSeq.is()) return aResult; @@ -810,11 +809,9 @@ lcl_TableData lcl_getDataForLocalTable( // resize data aResult.aDataInRows.resize( nNumRows ); - double fNan = 0.0; - ::rtl::math::setNan( &fNan ); for (auto& aData: aResult.aDataInRows) - aData.resize(nNumColumns, fNan); + aData.resize(nNumColumns, std::numeric_limits<double>::quiet_NaN()); aResult.aColumnDescriptions.resize( nNumColumns ); aResult.aComplexColumnDescriptions.realloc( nNumColumns ); aResult.aRowDescriptions.resize( nNumRows ); diff --git a/xmloff/source/chart/SchXMLTableContext.cxx b/xmloff/source/chart/SchXMLTableContext.cxx index 6b86ad529daf..47cc4f573ed2 100644 --- a/xmloff/source/chart/SchXMLTableContext.cxx +++ b/xmloff/source/chart/SchXMLTableContext.cxx @@ -27,7 +27,6 @@ #include "transporttypes.hxx" #include <XMLStringBufferImportContext.hxx> #include <o3tl/safeint.hxx> -#include <rtl/math.hxx> #include <sal/log.hxx> #include <xmloff/xmlnamespace.hxx> #include <xmloff/xmltoken.hxx> @@ -42,6 +41,7 @@ #include <com/sun/star/chart2/XCoordinateSystemContainer.hpp> +#include <limits> #include <vector> #include <algorithm> #include <iterator> @@ -65,10 +65,8 @@ struct lcl_ApplyCellToData explicit lcl_ApplyCellToData( Sequence< double > & rOutData ) : m_rData( rOutData ), m_nIndex( 0 ), - m_nSize( rOutData.getLength()), - m_fNaN( 0.0 ) + m_nSize( rOutData.getLength()) { - ::rtl::math::setNan( &m_fNaN ); } void operator() ( const SchXMLCell & rCell ) @@ -78,7 +76,7 @@ struct lcl_ApplyCellToData if( rCell.eType == SCH_CELL_TYPE_FLOAT ) m_rData[m_nIndex] = rCell.fValue; else - m_rData[m_nIndex] = m_fNaN; + m_rData[m_nIndex] = std::numeric_limits<double>::quiet_NaN(); } ++m_nIndex; } @@ -92,7 +90,6 @@ private: Sequence< double > & m_rData; sal_Int32 m_nIndex; sal_Int32 m_nSize; - double m_fNaN; }; void lcl_fillRangeMapping( @@ -741,10 +738,8 @@ void SchXMLTableHelper::applyTableToInternalDataProvider( // values Sequence< double >& rTargetRow = aDataInRows[nRow]; lcl_ApplyCellToData aApplyCellToData = ::std::for_each( rRow.begin() + nColOffset, rRow.end(), lcl_ApplyCellToData( rTargetRow ) ); - double fNaN = 0.0; - ::rtl::math::setNan( &fNaN ); for( sal_Int32 nCurrentIndex = aApplyCellToData.getCurrentIndex(); nCurrentIndex<nNumColumns; nCurrentIndex++ ) - rTargetRow[nCurrentIndex] = fNaN;//#i110615# + rTargetRow[nCurrentIndex] = std::numeric_limits<double>::quiet_NaN();//#i110615# } } } |