diff options
author | Winfried Donkers <winfrieddonkers@libreoffice.org> | 2016-12-31 10:05:46 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2017-01-04 11:12:41 +0000 |
commit | 1aa34bf14e86f3b684c56a9db8ebf1307413df5d (patch) | |
tree | e08848f2a520e6df9beaa965e2a13095b307448a | |
parent | f7eeb3fc1dc5d072dbfd22b68cc51f3a2c8ef8b0 (diff) |
tdf#104981 Fix deficiencies with PERCENTRANK functions.
Added constraint check for significance argument.
Replced inproper use of log() with log10().
Improved code efficiency a little bit.
Change-Id: Ie918857e6a04ea9fcf18410f789d7252f9c1cfc8
Reviewed-on: https://gerrit.libreoffice.org/32528
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Eike Rathke <erack@redhat.com>
(cherry picked from commit facb4e69e4c75839df89969206403d2e97146dbd)
Reviewed-on: https://gerrit.libreoffice.org/32703
-rw-r--r-- | sc/source/core/tool/interpr3.cxx | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sc/source/core/tool/interpr3.cxx b/sc/source/core/tool/interpr3.cxx index 5e7302203e7c..c9e145d46d06 100644 --- a/sc/source/core/tool/interpr3.cxx +++ b/sc/source/core/tool/interpr3.cxx @@ -3508,6 +3508,11 @@ void ScInterpreter::ScPercentrank( bool bInclusive ) if ( !MustHaveParamCount( nParamCount, 2, 3 ) ) return; double fSignificance = ( nParamCount == 3 ? ::rtl::math::approxFloor( GetDouble() ) : 3.0 ); + if ( fSignificance < 1.0 ) + { + PushIllegalArgument(); + return; + } double fNum = GetDouble(); vector<double> aSortArray; GetSortArray( 1, aSortArray, nullptr, false, false ); @@ -3527,8 +3532,8 @@ void ScInterpreter::ScPercentrank( bool bInclusive ) fRes = GetPercentrank( aSortArray, fNum, bInclusive ); if ( fRes != 0.0 ) { - double fExp = ::rtl::math::approxFloor( log( fRes ) ); - fRes = ::rtl::math::round( fRes * pow( 10, -fExp + fSignificance - 1 ) ) / pow( 10, -fExp + fSignificance - 1 ); + double fExp = ::rtl::math::approxFloor( log10( fRes ) ) + 1.0 - fSignificance; + fRes = ::rtl::math::round( fRes * pow( 10, -fExp ) ) / pow( 10, -fExp ); } PushDouble( fRes ); } |