From: PJ Fanning Date: Sun, 5 Jun 2022 19:55:50 +0000 (+0000) Subject: add COVARIANCE.S function X-Git-Tag: REL_5_2_3~239 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=41dfbd67c5900ef313149c2090dc92e40b4a95d0;p=poi.git add COVARIANCE.S function git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1901687 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java b/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java index a8a1afc4e8..af7c4c0aa1 100644 --- a/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java +++ b/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java @@ -91,6 +91,7 @@ public final class AnalysisToolPak implements UDFFinder { r(m, "COUPNUM", null); r(m, "COUPPCD", null); r(m, "COVARIANCE.P", Covar.instanceP); + r(m, "COVARIANCE.S", Covar.instanceS); r(m, "CUBEKPIMEMBER", null); r(m, "CUBEMEMBER", null); r(m, "CUBEMEMBERPROPERTY", null); diff --git a/poi/src/main/java/org/apache/poi/ss/formula/functions/Correl.java b/poi/src/main/java/org/apache/poi/ss/formula/functions/Correl.java index 203df5e0be..0228873549 100644 --- a/poi/src/main/java/org/apache/poi/ss/formula/functions/Correl.java +++ b/poi/src/main/java/org/apache/poi/ss/formula/functions/Correl.java @@ -42,6 +42,8 @@ public class Correl extends TwoArrayFunction { public static final Correl instance = new Correl(); + private Correl() {} + @Override public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0, ValueEval arg1) { try { diff --git a/poi/src/main/java/org/apache/poi/ss/formula/functions/Covar.java b/poi/src/main/java/org/apache/poi/ss/formula/functions/Covar.java index 43f35d64e3..ac838837e4 100644 --- a/poi/src/main/java/org/apache/poi/ss/formula/functions/Covar.java +++ b/poi/src/main/java/org/apache/poi/ss/formula/functions/Covar.java @@ -37,7 +37,14 @@ import java.util.List; */ public class Covar extends TwoArrayFunction implements FreeRefFunction { - public static final Covar instanceP = new Covar(); + public static final Covar instanceP = new Covar(false); + public static final Covar instanceS = new Covar(true); + + private final boolean sampleBased; + + private Covar(boolean sampleBased) { + this.sampleBased = sampleBased; + } @Override public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0, ValueEval arg1) { @@ -45,7 +52,7 @@ public class Covar extends TwoArrayFunction implements FreeRefFunction { final List arrays = getNumberArrays(arg0, arg1); final Covariance covar = new Covariance(); final double result = covar.covariance( - arrays.get(0).toArray(), arrays.get(1).toArray(), false); + arrays.get(0).toArray(), arrays.get(1).toArray(), sampleBased); return new NumberEval(result); } catch (EvaluationException e) { return e.getErrorEval(); diff --git a/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCovar.java b/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCovar.java index cbfbc69b0d..a80a69ffe3 100644 --- a/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCovar.java +++ b/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCovar.java @@ -46,6 +46,7 @@ final class TestCovar { HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); assertDouble(fe, cell, "COVAR(A2:A6,B2:B6)", 5.2, 0.0000000005); assertDouble(fe, cell, "COVARIANCE.P(A2:A6,B2:B6)", 5.2, 0.0000000005); + assertDouble(fe, cell, "COVARIANCE.S(A2:A6,B2:B6)", 6.5, 0.0000000005); } } @@ -58,6 +59,7 @@ final class TestCovar { HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); assertDouble(fe, cell, "COVAR(A2:A6,B2:B6)", 5.5625, 0.0000000005); assertDouble(fe, cell, "COVARIANCE.P(A2:A6,B2:B6)", 5.5625, 0.0000000005); + assertDouble(fe, cell, "COVARIANCE.S(A2:A6,B2:B6)", 7.416666666666666, 0.0000000005); } } @@ -70,6 +72,7 @@ final class TestCovar { HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); assertDouble(fe, cell, "COVAR(A2:A6,B2:B6)", 5.5625, 0.0000000005); assertDouble(fe, cell, "COVARIANCE.P(A2:A6,B2:B6)", 5.5625, 0.0000000005); + assertDouble(fe, cell, "COVARIANCE.S(A2:A6,B2:B6)", 7.416666666666666, 0.0000000005); } } @@ -82,8 +85,10 @@ final class TestCovar { HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); assertError(fe, cell, "COVAR(A2:A6,B2:B5)", FormulaError.NA); assertError(fe, cell, "COVARIANCE.P(A2:A6,B2:B5)", FormulaError.NA); + assertError(fe, cell, "COVARIANCE.S(A2:A6,B2:B5)", FormulaError.NA); assertError(fe, cell, "COVAR(A2:B6,B2:B6)", FormulaError.NA); assertError(fe, cell, "COVARIANCE.P(A2:B6,B2:B6)", FormulaError.NA); + assertError(fe, cell, "COVARIANCE.S(A2:B6,B2:B6)", FormulaError.NA); } }