Skip to content

Java horror

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

Your email is never published nor shared. Required fields are marked *