Class ScalarTurboEvaluator2
java.lang.Object
com.github.gbenroscience.parser.turbo.tools.ScalarTurboEvaluator2
- All Implemented Interfaces:
Savable,TurboExpressionEvaluator,Serializable
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:
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic doubleacot(double x) static doubleacsc(double x) static doubleadd(double a, double b) static doubleasec(double x) static double[]collectToArray(double... values) compile()Compile a postfix token array into a fast-executing expression.compileScalar(MathExpression.Token[] postfix) static doublecot(double x) static MethodHandlecreateConstantHandle(double value) static doublecsc(double x) static doublecube(double x) static doubledivide(double a, double b) static doubleexecuteGeneralRoot(MethodHandle targetHandle, MethodHandle derivHandle, int xSlot, double lower, double upper, int iterations) static double[]executeQuadraticRoot(String funcHandle) static double[]executeTartagliaRoot(String funcHandle) static doubleexecuteTurboIntegral(Function f, MethodHandle handle, double lower, double upper, int iterations, String[] vars, int[] slots) static doubleexecuteTurboRoot(MethodHandle baseHandle, MethodHandle derivHandle, int xSlot, double lower, double upper, int iterations) static doubleextractFirstScalar(Object result) static doublestatic double[]flattenObjects(Object... args) static MethodHandlegetOptimizedPowerHandle(double n) static doublegradToRad(double grads) static doubleinvCube(double x) static ObjectinvokeRegistryMethod(int methodId, double[] argsValues) static doubleinvSqrt(double x) static doubleinvSquare(double x) booleanstatic doublemodulo(double a, double b) static doublemultiply(double a, double b) static doublequad(double x) static doublereciprocal(double x) static doublesec(double x) voidsetWillFoldConstants(boolean willFoldConstants) static doublesquare(double x) static doublesubtract(double a, double b)
-
Field Details
-
slots
protected final int[] slots -
registry
-
-
Constructor Details
-
ScalarTurboEvaluator2
-
-
Method Details
-
setWillFoldConstants
public void setWillFoldConstants(boolean willFoldConstants) -
isWillFoldConstants
public boolean isWillFoldConstants() -
invokeRegistryMethod
-
compile
Description copied from interface:TurboExpressionEvaluatorCompile a postfix token array into a fast-executing expression.- Specified by:
compilein interfaceTurboExpressionEvaluator- Returns:
- A FastCompositeExpression ready for evaluation
- Throws:
Throwable- if compilation fails
-
collectToArray
public static double[] collectToArray(double... values) -
flattenObjects
-
extractScalarFromResult
-
executeGeneralRoot
public static double executeGeneralRoot(MethodHandle targetHandle, MethodHandle derivHandle, int xSlot, double lower, double upper, int iterations) throws Throwable - Throws:
Throwable
-
compileScalar
- Throws:
Throwable
-
gradToRad
public static double gradToRad(double grads) -
createConstantHandle
-
extractFirstScalar
-
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
-
executeTartagliaRoot
-
getOptimizedPowerHandle
- 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)
-