[Libreoffice-commits] core.git: Branch 'libreoffice-5-2' - sc/source
Winfried Donkers
winfrieddonkers at libreoffice.org
Sat Oct 15 00:57:53 UTC 2016
sc/source/core/tool/interpr8.cxx | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
New commits:
commit aaa38fd34faab3108245f8fa8c13642919ff0c95
Author: Winfried Donkers <winfrieddonkers at libreoffice.org>
Date: Thu Sep 15 13:39:35 2016 +0200
tdf#94635 follow up; handle linear data properly when samples in period
are to be calculated by function.
Applies to all FORECAST.ETS functions with argument period_length having
value 1.
Reviewed-on: https://gerrit.libreoffice.org/28923
Reviewed-by: Eike Rathke <erack at redhat.com>
Tested-by: Eike Rathke <erack at redhat.com>
(cherry picked from commit fb790880eb11552b2e7d1dcf6c09d2663712290f)
Minus the modification to the function test case that does not exist in 5-2.
Change-Id: Icb5a0288670321caf0dd5b70bee4b8811b9ba4a9
Reviewed-on: https://gerrit.libreoffice.org/29891
Reviewed-by: Eike Rathke <erack at redhat.com>
Tested-by: Jenkins <ci at libreoffice.org>
diff --git a/sc/source/core/tool/interpr8.cxx b/sc/source/core/tool/interpr8.cxx
index 7a02955..a31b061 100644
--- a/sc/source/core/tool/interpr8.cxx
+++ b/sc/source/core/tool/interpr8.cxx
@@ -195,11 +195,6 @@ bool ScETSForecastCalculation::PreprocessDataRange( const ScMatrixRef& rMatX, co
}
}
- if ( rSmplInPrd != 1 )
- mnSmplInPrd = rSmplInPrd;
- else
- mnSmplInPrd = CalcPeriodLen();
-
// Month intervals don't have exact stepsize, so first
// detect if month interval is used.
// Method: assume there is an month interval and verify.
@@ -378,6 +373,16 @@ bool ScETSForecastCalculation::PreprocessDataRange( const ScMatrixRef& rMatX, co
}
}
}
+
+ if ( rSmplInPrd != 1 )
+ mnSmplInPrd = rSmplInPrd;
+ else
+ {
+ mnSmplInPrd = CalcPeriodLen();
+ if ( mnSmplInPrd == 1 )
+ bEDS = true; // period length 1 means no periodic data: EDS suffices
+ }
+
if ( !initData() )
return false; // note: mnErrorValue is set in called function(s)
@@ -536,7 +541,7 @@ SCSIZE ScETSForecastCalculation::CalcPeriodLen()
SCSIZE nBestVal = mnCount;
double fBestME = ::std::numeric_limits<double>::max();
- for ( SCSIZE nPeriodLen = mnCount / 2; nPeriodLen > 1; nPeriodLen-- )
+ for ( SCSIZE nPeriodLen = mnCount / 2; nPeriodLen >= 1; nPeriodLen-- )
{
double fMeanError = 0.0;
SCSIZE nPeriods = mnCount / nPeriodLen;
@@ -548,7 +553,7 @@ SCSIZE ScETSForecastCalculation::CalcPeriodLen()
}
fMeanError /= static_cast< double >( ( nPeriods - 1 ) * nPeriodLen - 1 );
- if ( fMeanError < fBestME || fMeanError == 0.0 )
+ if ( fMeanError <= fBestME || fMeanError == 0.0 )
{
nBestVal = nPeriodLen;
fBestME = fMeanError;
More information about the Libreoffice-commits
mailing list