Class ScalarTurboEvaluator2

java.lang.Object
com.github.gbenroscience.parser.turbo.tools.ScalarTurboEvaluator2
All Implemented Interfaces:
Savable, TurboExpressionEvaluator, Serializable

public class ScalarTurboEvaluator2 extends Object implements TurboExpressionEvaluator, Savable
Turbo compiler optimized for PURE SCALAR expressions. Uses widening techniques to pass variables to the evaluator. May be intensely fast. But has limits due to the JVMs limits of 256 slots(so 126-127 args for double args) for method argument count Will balance this with ScalarTurboEvaluator1 which is array based, to allow usage of expressions with thousands of variables and more.
Author:
GBEMIRO
See Also:
  • Field Details

  • Constructor Details

    • ScalarTurboEvaluator2

      public ScalarTurboEvaluator2(MathExpression me)
  • Method Details

    • setWillFoldConstants

      public void setWillFoldConstants(boolean willFoldConstants)
    • isWillFoldConstants

      public boolean isWillFoldConstants()
    • invokeRegistryMethod

      public static Object invokeRegistryMethod(int methodId, double[] argsValues)
    • compile

      public FastCompositeExpression compile() throws Throwable
      Description copied from interface: TurboExpressionEvaluator
      Compile a postfix token array into a fast-executing expression.
      Specified by:
      compile in interface TurboExpressionEvaluator
      Returns:
      A FastCompositeExpression ready for evaluation
      Throws:
      Throwable - if compilation fails
    • collectToArray

      public static double[] collectToArray(double... values)
    • flattenObjects

      public static double[] flattenObjects(Object... args)
    • extractScalarFromResult

      public static double extractScalarFromResult(MathExpression.EvalResult res)
    • executeGeneralRoot

      public static double executeGeneralRoot(MethodHandle targetHandle, MethodHandle derivHandle, int xSlot, double lower, double upper, int iterations) throws Throwable
      Throws:
      Throwable
    • compileScalar

      public MethodHandle compileScalar(MathExpression.Token[] postfix) throws Throwable
      Throws:
      Throwable
    • gradToRad

      public static double gradToRad(double grads)
    • createConstantHandle

      public static MethodHandle createConstantHandle(double value)
    • extractFirstScalar

      public static double extractFirstScalar(Object result)
    • executeTurboIntegral

      public static double executeTurboIntegral(Function f, MethodHandle handle, double lower, double upper, int iterations, String[] vars, int[] slots) throws Throwable
      Throws:
      Throwable
    • executeTurboRoot

      public static double executeTurboRoot(MethodHandle baseHandle, MethodHandle derivHandle, int xSlot, double lower, double upper, int iterations)
    • executeQuadraticRoot

      public static double[] executeQuadraticRoot(String funcHandle)
    • executeTartagliaRoot

      public static double[] executeTartagliaRoot(String funcHandle)
    • getOptimizedPowerHandle

      public static MethodHandle getOptimizedPowerHandle(double n) throws Throwable
      Throws:
      Throwable
    • sec

      public static double sec(double x)
    • csc

      public static double csc(double x)
    • cot

      public static double cot(double x)
    • asec

      public static double asec(double x)
    • acsc

      public static double acsc(double x)
    • acot

      public static double acot(double x)
    • add

      public static double add(double a, double b)
    • subtract

      public static double subtract(double a, double b)
    • multiply

      public static double multiply(double a, double b)
    • divide

      public static double divide(double a, double b)
    • modulo

      public static double modulo(double a, double b)
    • square

      public static double square(double x)
    • cube

      public static double cube(double x)
    • quad

      public static double quad(double x)
    • reciprocal

      public static double reciprocal(double x)
    • invSquare

      public static double invSquare(double x)
    • invCube

      public static double invCube(double x)
    • invSqrt

      public static double invSqrt(double x)