This is life without enums, macros or function pointers:
static final int
SIN = 1, COS = 2, TAN = 3,
ASIN = 4, ACOS = 5, ATAN = 6,
SINH = 7, COSH = 8, TANH = 9,
ASINH = 10, ACOSH = 11, ATANH = 12,
EXP = 20, LOG = 21, LOG10 = 22, LOG2 = 23,
SQRT = 31, CBRT = 32, POW = 33,
INT = 40, FRAC = 41, ABS = 42,
FLOOR = 43, CEIL = 44, SIGN = 45,
MIN = 46, MAX = 47, GCD = 48,
COMB = 49, PERM = 50, RND = 51,
FACT = 52;
static final String names[] = {
"sin", "cos", "tan", "asin", "acos", "atan",
"sinh", "cosh", "tanh", "asinh", "acosh", "atanh",
"exp", "log", "ln", "log10", "log2", "pow",
"sqrt", "cbrt",
"\u221a", "\u221b",
"int", "frac", "abs",
"floor", "ceil", "sign",
"min", "max", "gcd",
"comb", "perm", "rnd",
};
/* keep 'codes' in sync with 'names' above */
static final int codes[] = {
SIN, COS, TAN, ASIN, ACOS, ATAN,
SINH, COSH, TANH, ASINH, ACOSH, ATANH,
EXP, LOG, LOG, LOG10, LOG2, POW,
SQRT, CBRT,
SQRT, CBRT,
INT, FRAC, ABS,
FLOOR,CEIL, SIGN,
MIN, MAX, GCD,
COMB, PERM, RND,
};
double eval(int code, double params[]) {
double x = params[0];
switch (code) {
case SIN: return Math.sin(x);
case COS: return Math.cos(x);
case TAN: return Math.tan(x);
case ASIN: return Math.asin(x);
case ACOS: return Math.acos(x);
case ATAN: return Math.atan(x);
//more follow
}
}
Post a Comment