Note that you can always add new custom functions. Each of the following functions can be applied to objects of the types indicated.
Functions added with addStandardFunctions():| Double | Complex | String | Vector | ||
| Sine | sin(x) | ||||
| Cosine | cos(x) | ||||
| Tangent | tan(x) | ||||
| Arc Sine | asin(x) | ||||
| Arc Cosine | acos(x) | ||||
| Arc Tangent | atan(x) | ||||
| Arc Tangent (with 2 parameters) | atan2(y, x) | ||||
| Hyperbolic Sine | sinh(x) | ||||
| Hyperbolic Cosine | cosh(x) | ||||
| Hyperbolic Tangent | tanh(x) | ||||
| Inverse Hyperbolic Sine | asinh(x) | ||||
| Inverse Hyperbolic Cosine | acosh(x) | ||||
| Inverse Hyperbolic Tangent | atanh(x) | ||||
| Natural Logarithm | ln(x) | ||||
| Logarithm base 10 | log(x) | ||||
| Exponential (e^x) | exp(x) | ||||
| Absolute Value / Magnitude | abs(x) | ||||
| Random number (between 0 and 1) | rand() | ||||
| Modulus | mod(x,y) = x % y | ||||
| Square Root | sqrt(x) | ||||
| Sum | sum(x,y,z) | ||||
| If | if(cond,trueval,falseval) | ||||
| Str (number to string) | str(x) | ||||
| Binomial coefficients | binom(n,i) | Integer values |
| Double | Complex | String | Vector | ||
| Real Component | re(c) | ||||
| Imaginary Component | im(c) | ||||
| Complex Modulus (Absolute Value) | cmod(c) | ||||
| Argument (Angle of complex value, in radians) | arg(c) | ||||
| Complex conjugate | conj(c) | ||||
| Complex, constructs a complex number from real and imaginar parts | complex(x,y) | ||||
| Polar, constructs a complex number from modulus and argument | polar(r,theta) |
The following is an example of how a custom function can be added.
Assume you want to add a function "half" to divide a number by two (for demonstration purposes).
public void run(Stack inStack) throws ParseException {
// check the stack
checkStack(inStack);
// get the parameter from the stack
Object param = inStack.pop();
// check whether the argument is of the right type
if (param instanceof Double) {
// calculate the result
double r = ((Double)param).doubleValue() / 2;
// push the result on the inStack
inStack.push(new Double(r));
} else {
throw new ParseException("Invalid parameter type");
}
}
parser.addFunction("half", new Half());
Source files