/** * Sample mode * @param numbers List of number * @return Sample median, if table was empty or null then Double.NaN is returned. */ public static final double mode(double... numbers) { if (numbers == null) return Double.NaN; if (numbers.length == 0) return Double.NaN; if (numbers.length == 1) return numbers[0]; for (double v : numbers) { if (mXparser.isCurrentCalculationCancelled()) return Double.NaN; if (Double.isNaN(v)) return Double.NaN; } double[][] dist = NumberTheory.getDistValues(numbers, true); return dist[0][0]; } }
/** * Prime counting function * * @param n number * * @return Number of primes below or equal x */ public static final long primeCount(long n) { if (n <= 1) return 0; if (n == 2) return 1; long numberOfPrimes = 1; for (long i = 3; i <= n; i++) { if (mXparser.isCurrentCalculationCancelled()) return (long)Double.NaN; if( primeTest(i) == true) numberOfPrimes++; } return numberOfPrimes; } /**
/** * Worpitzky numbers * * @param n the n function parameter * @param k the k function parameter * * @return if n,k >= 0 and k <= n return Worpitzky number, * otherwise return Double.NaN. */ public static final double worpitzkyNumber(int n, int k) { double result = Double.NaN; if ( (n >= 0) && (k >= 0) && (k <= n) ){ result = 0; for (int v = 0; v <= k; v++) { result += Math.pow(-1, v+k) * Math.pow(v+1, n) * binomCoeff(k, v); if (mXparser.isCurrentCalculationCancelled()) return Double.NaN; } } return result; } /**
/** * Boolean OR variadic * * @param values List of values * @return Returns BooleanAlgebra.TRUE if at least one value on the list is BooleanAlgebra.TURE, * otherwise returns BooleanAlgebra.FALSE */ public static final double orVariadic(double[] values) { if (values == null) return Double.NaN; if (values.length == 0) return Double.NaN; int cntFalse = 0; int bv; for (double v : values) { bv = double2IntBoolean(v); if (bv == TRUE) return TRUE; if (bv == FALSE) cntFalse++; if (mXparser.isCurrentCalculationCancelled()) return Double.NaN; } if (cntFalse == values.length) return FALSE; else return Double.NaN; } /**
/** * Number of digits needed to represent given number in numeral system with given base. * @param number The number * @param numeralSystemBase Numeral system base above 0 * @return Returns number of digits. In case when numeralSystemBase is lower than * 1 then -1 is returned. */ public static final long numberOfDigits(long number, long numeralSystemBase) { if (numeralSystemBase < 1) return -1; if (number < 0) number = -number; if (numeralSystemBase == 10) return numberOfDigits(number); if (numeralSystemBase == 1) return (int)number; if (number < numeralSystemBase) return 1; long quotient = number; long digitsNum = 0; while (quotient >= 1) { if (mXparser.isCurrentCalculationCancelled()) return (long)Double.NaN; quotient = quotient / numeralSystemBase; digitsNum++; } return digitsNum; } /**
@Override protected void testScenario() { Expression e = new Expression(test.exprStr); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; e.calculate(); } } }
/** * Fibonacci numbers * * @param n the n function parameter * * @return if n >= 0 returns fibonacci numbers, * otherwise returns Double.NaN. */ public final static double fibonacciNumber(int n) { if (n < 0 ) return Double.NaN; if (n == 0) return 0; if (n == 1) return 1; if (mXparser.isCurrentCalculationCancelled()) return Double.NaN; return fibonacciNumber(n-1) + fibonacciNumber(n-2); } /**
/** * Lucas numebrs * * @param n the n function parameter * * @return if n >= 0 returns Lucas numbers, * otherwise returns Double.NaN. */ public final static double lucasNumber(int n) { if (n < 0 ) return Double.NaN; if (n == 0) return 2; if (n == 1) return 1; if (mXparser.isCurrentCalculationCancelled()) return Double.NaN; return lucasNumber(n-1) + lucasNumber(n-2); } /**
/** * Private function calculating continued polynomial * recursively. * * @param n the polynomial order * @param x the x values * * @return continued polynomial value */ private static final double continuedPolynomial(int n, double[] x) { if (x == null) return Double.NaN; if (x.length == 0) return Double.NaN; if (n == 0) return 1; if (n == 1) return x[0]; if (mXparser.isCurrentCalculationCancelled()) return Double.NaN; return x[n-1] * continuedPolynomial(n-1, x) + continuedPolynomial(n-2, x); } /**
/** * Greatest common divisor (GCD) * * @param numbers the numbers * * @return GCD(a_1,...,a_n) a_1,...,a_n in numbers */ public static final long gcd(long... numbers) { if (numbers == null) return -1; if (numbers.length == 0) return -1; if (numbers.length == 1) if (numbers[0] >= 0) return numbers[0]; else return -numbers[0]; if (numbers.length == 2) return gcd( numbers[0], numbers[1] ); for (int i = 1; i < numbers.length; i++) { if (mXparser.isCurrentCalculationCancelled()) return (long)Double.NaN; numbers[i] = gcd( numbers[i-1], numbers[i] ); } return numbers[numbers.length-1]; } /**
@Override protected void testScenario() { Function f = new Function("f", "x", "x"); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; f = new Function("f(x,y)=x+y"); } f.calculate(1, 2); } }
@Override protected void testScenario() { Expression e = new Expression(""); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; e = new Expression("sin(2+(3*4)^2)/10"); } e.calculate(); } }
@Override protected void testScenario() { Function f = new Function("f", "x", "x"); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; f = new Function("f", "x+y", "x", "y"); } f.calculate(1); } }
@Override protected void testScenario() { Constant c = new Constant("c", 5); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; c = new Constant("c=5"); } c.getConstantValue(); } }
@Override protected void testScenario() { Expression e = new Expression(""); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; e.setExpressionString("sin(2+(3*4)^2)/10"); e.checkSyntax(); } } }
@Override protected void testScenario() { Constant c = new Constant("c", 5); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; c = new Constant("c", 5); } c.getConstantValue(); } }
@Override protected void testScenario() { Argument x = new Argument("x", 2); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; x = new Argument("x=5"); } x.getArgumentValue(); } }
@Override protected void testScenario() { Argument x = new Argument("x", 2); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; x = new Argument("x", 5); } x.getArgumentValue(); } }
@Override protected void testScenario() { Argument x = new Argument("x"); Expression e = new Expression(test.exprStr, x); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; x.setArgumentValue(i); e.calculate(); } } }
@Override protected void testScenario() { Argument x = new Argument("x"); Argument y = new Argument("y"); Function f = new Function("f(x,y)=3*x+4*y"); Expression e = new Expression(test.exprStr, f, x, y); for (int i = 0; i <= super.iterNum; i++) { if (mXparser.isCurrentCalculationCancelled()) break; x.setArgumentValue(i); y.setArgumentValue(i); e.calculate(); } } }