Author: fanningpj
Date: Sat Apr 30 08:16:48 2022
New Revision: 1900416
URL: http://svn.apache.org/viewvc?rev=1900416&view=rev
Log:
support sqrtpi function
Added:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Sqrtpi.java
- copied, changed from r1900409,
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Gcd.java
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestSqrtpi.java
- copied, changed from r1900408,
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestGcd.java
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java?rev=1900416&r1=1900415&r2=1900416&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
Sat Apr 30 08:16:48 2022
@@ -172,7 +172,7 @@ public final class AnalysisToolPak imple
r(m, "RTD", null);
r(m, "SERIESSUM", null);
r(m, "SINGLE", Single.instance);
- r(m, "SQRTPI", null);
+ r(m, "SQRTPI", Sqrtpi.instance);
r(m, "SUMIFS", Sumifs.instance);
r(m, "SWITCH", Switch.instance);
r(m, "TBILLEQ", null);
Copied:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Sqrtpi.java
(from r1900409,
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Gcd.java)
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Sqrtpi.java?p2=poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Sqrtpi.java&p1=poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Gcd.java&r1=1900409&r2=1900416&rev=1900416&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Gcd.java
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/Sqrtpi.java
Sat Apr 30 08:16:48 2022
@@ -16,73 +16,53 @@
==================================================================== */
package org.apache.poi.ss.formula.functions;
-import org.apache.commons.math3.util.ArithmeticUtils;
import org.apache.poi.ss.formula.OperationEvaluationContext;
import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.ss.formula.eval.EvaluationException;
import org.apache.poi.ss.formula.eval.NumberEval;
import org.apache.poi.ss.formula.eval.OperandResolver;
import org.apache.poi.ss.formula.eval.ValueEval;
-
-import java.util.ArrayList;
-
+import org.apache.poi.ss.util.NumberToTextConverter;
/**
- * Implementation for Excel GCD() function.
+ * Implementation for Excel SQRTPI() function.
* <p>
- * <b>Syntax</b>:<br> <b>GCD </b>(<b>number</b>, ...)<br>
+ * <b>Syntax</b>:<br> <b>SQRT </b>(<b>number</b>)<br>
* </p>
* <p>
- * Returns the greatest common divisor of two or more integers. The greatest
common divisor is the largest integer that divides both number1 and number2
without a remainder.
+ * Returns the square root of (number * pi).
* </p>
* <p>
- * See
https://support.microsoft.com/en-us/office/gcd-function-d5107a51-69e3-461f-8e4c-ddfc21b5073a
+ * See
https://support.microsoft.com/en-us/office/sqrtpi-function-1fb4e63f-9b51-46d6-ad68-b3e7a8b519b4
* </p>
*/
-public class Gcd implements FreeRefFunction {
+public class Sqrtpi implements FreeRefFunction {
- public static final Gcd instance = new Gcd();
-
- private static final long MAX_INPUT = (long)Math.pow(2, 53);
+ public static final Sqrtpi instance = new Sqrtpi();
@Override
- public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec)
{
- if (args.length < 1) {
+ public ValueEval evaluate(final ValueEval[] args, final
OperationEvaluationContext ec) {
+ if (args.length != 1) {
return ErrorEval.VALUE_INVALID;
- } else if (args.length == 1) {
- try {
- ValueEval v1 = OperandResolver.getSingleValue(args[0],
ec.getRowIndex(), ec.getColumnIndex());
- double d = OperandResolver.coerceValueToDouble(v1);
- if (isInvalidInput(d)) {
- return ErrorEval.NUM_ERROR;
- }
- return new NumberEval((long)d);
- } catch (EvaluationException ee) {
- return ErrorEval.VALUE_INVALID;
- }
- } else {
- try {
- ArrayList<Long> evals = new ArrayList<>();
- for (int i = 0; i < args.length; i++) {
- ValueEval ve = OperandResolver.getSingleValue(args[i],
ec.getRowIndex(), ec.getColumnIndex());
- double d = OperandResolver.coerceValueToDouble(ve);
- if (isInvalidInput(d)) {
- return ErrorEval.NUM_ERROR;
- }
- evals.add((long)d);
- }
- long result = evals.get(0);
- for (int i = 1; i < evals.size(); i++) {
- result = ArithmeticUtils.gcd(result, evals.get(i));
- }
- return new NumberEval(result);
- } catch (EvaluationException ee) {
- return ErrorEval.VALUE_INVALID;
+ }
+ return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0]);
+ }
+
+ private ValueEval evaluate(final int srcRowIndex, final int
srcColumnIndex, final ValueEval arg0) {
+ try {
+ final ValueEval v1 = OperandResolver.getSingleValue(arg0,
srcRowIndex, srcColumnIndex);
+ final double d = OperandResolver.coerceValueToDouble(v1);
+ if (isInvalidInput(d)) {
+ return ErrorEval.NUM_ERROR;
}
+ final double result = Math.sqrt(Math.PI * d);
+ return new
NumberEval(Double.parseDouble(NumberToTextConverter.toText(result)));
+ } catch (EvaluationException e) {
+ return e.getErrorEval();
}
}
private boolean isInvalidInput(double d) {
- return (d < 0 || d > MAX_INPUT);
+ return (d < 0);
}
}
Copied:
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestSqrtpi.java
(from r1900408,
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestGcd.java)
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestSqrtpi.java?p2=poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestSqrtpi.java&p1=poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestGcd.java&r1=1900408&r2=1900416&rev=1900416&view=diff
==============================================================================
---
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestGcd.java
(original)
+++
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestSqrtpi.java
Sat Apr 30 08:16:48 2022
@@ -17,51 +17,35 @@
package org.apache.poi.ss.formula.functions;
-import org.apache.poi.hssf.usermodel.HSSFCell;
-import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.formula.OperationEvaluationContext;
-import org.apache.poi.ss.formula.eval.BoolEval;
import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.ss.formula.eval.NumberEval;
import org.apache.poi.ss.formula.eval.StringEval;
import org.apache.poi.ss.formula.eval.ValueEval;
import org.junit.jupiter.api.Test;
-import java.io.IOException;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
-import static org.apache.poi.ss.util.Utils.addRow;
-import static org.apache.poi.ss.util.Utils.assertDouble;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
- * Tests for {@link Gcd}
+ * Tests for {@link Sqrtpi}
*/
-final class TestGcd {
+final class TestSqrtpi {
private static final OperationEvaluationContext ec = new
OperationEvaluationContext(null, null, 0, 0, 0, null);
-
//https://support.microsoft.com/en-us/office/gcd-function-d5107a51-69e3-461f-8e4c-ddfc21b5073a
+
//https://support.microsoft.com/en-us/office/sqrtpi-function-1fb4e63f-9b51-46d6-ad68-b3e7a8b519b4
@Test
void testBasic() {
- confirmValue(Arrays.asList(5, 2), 1.0);
- confirmValue(Arrays.asList(24, 36), 12.0);
- confirmValue(Arrays.asList(7, 1), 1.0);
- confirmValue(Arrays.asList(5, 0), 5.0);
- confirmValue(Arrays.asList(10, 5, 0), 5.0);
- confirmValue(Arrays.asList(10.9, 5, 0), 5.0);
- confirmValue(Arrays.asList(Math.pow(2, 53), 2.0), 2.0);
+ confirmValue(Arrays.asList(1), 1.77245385090552);
+ confirmValue(Arrays.asList(2), 2.506628274631);
}
@Test
void testNumError() {
confirmNumError(Arrays.asList(-1));
- confirmNumError(Arrays.asList(10, -1));
- confirmNumError(Arrays.asList(Math.pow(2, 54), 2.0));
}
@Test
@@ -81,7 +65,7 @@ final class TestGcd {
args[i++] = new StringEval(obj.toString());
}
}
- return Gcd.instance.evaluate(args, ec);
+ return Sqrtpi.instance.evaluate(args, ec);
}
private static void confirmValue(List<Object> numberList, double expected)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]