xpressn.c, use enums instead of literals
This commit is contained in:
parent
297778127b
commit
9cb20e97d0
|
|
@ -102,6 +102,18 @@ initkeys(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
enum {
|
||||||
|
XKEY_AND = 1, XKEY_OR, XKEY_NOT, XKEY_DIV, XKEY_MOD, XKEY_DEFINED
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum {
|
||||||
|
XFU_SQR = 1, XFU_SQRT, XFU_SIN, XFU_COS, XFU_EXP, XFU_LN, XFU_ARCTAN, XFU_ABS, XFU_POW, XFU_PWR, XFU_MAX, XFU_MIN, XFU_INT, XFU_LOG, XFU_SINH, XFU_COSH,
|
||||||
|
XFU_TANH, XFU_TERNARY_FCN, XFU_V, XFU_AGAUSS, XFU_SGN, XFU_GAUSS, XFU_UNIF, XFU_AUNIF, XFU_LIMIT, XFU_CEIL, XFU_FLOOR,
|
||||||
|
XFU_ASIN, XFU_ACOS, XFU_ATAN, XFU_ASINH, XFU_ACOSH, XFU_ATANH, XFU_TAN,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static double
|
static double
|
||||||
mathfunction(int f, double z, double x)
|
mathfunction(int f, double z, double x)
|
||||||
/* the list of built-in functions. Patch 'fmath', here and near line 888 to get more ...*/
|
/* the list of built-in functions. Patch 'fmath', here and near line 888 to get more ...*/
|
||||||
|
|
@ -109,58 +121,58 @@ mathfunction(int f, double z, double x)
|
||||||
double y;
|
double y;
|
||||||
switch (f)
|
switch (f)
|
||||||
{
|
{
|
||||||
case 1:
|
case XFU_SQR:
|
||||||
y = x * x;
|
y = x * x;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case XFU_SQRT:
|
||||||
y = sqrt(x);
|
y = sqrt(x);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case XFU_SIN:
|
||||||
y = sin(x);
|
y = sin(x);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case XFU_COS:
|
||||||
y = cos(x);
|
y = cos(x);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case XFU_EXP:
|
||||||
y = exp(x);
|
y = exp(x);
|
||||||
break;
|
break;
|
||||||
case 6: /* ln(x) */
|
case XFU_LN:
|
||||||
y = log(x);
|
y = log(x);
|
||||||
break;
|
break;
|
||||||
case 7:
|
case XFU_ARCTAN:
|
||||||
y = atan(x);
|
y = atan(x);
|
||||||
break;
|
break;
|
||||||
case 8:
|
case XFU_ABS:
|
||||||
y = fabs(x);
|
y = fabs(x);
|
||||||
break;
|
break;
|
||||||
case 9:
|
case XFU_POW:
|
||||||
y = pow(z, x);
|
y = pow(z, x);
|
||||||
break;
|
break;
|
||||||
case 10:
|
case XFU_PWR:
|
||||||
y = pow(fabs(z), x);
|
y = pow(fabs(z), x);
|
||||||
break;
|
break;
|
||||||
case 11:
|
case XFU_MAX:
|
||||||
y = MAX(x, z);
|
y = MAX(x, z);
|
||||||
break;
|
break;
|
||||||
case 12:
|
case XFU_MIN:
|
||||||
y = MIN(x, z);
|
y = MIN(x, z);
|
||||||
break;
|
break;
|
||||||
case 13: /* int(x) */
|
case XFU_INT:
|
||||||
y = trunc(x);
|
y = trunc(x);
|
||||||
break;
|
break;
|
||||||
case 14:
|
case XFU_LOG:
|
||||||
y = log(x);
|
y = log(x);
|
||||||
break;
|
break;
|
||||||
case 15:
|
case XFU_SINH:
|
||||||
y = sinh(x);
|
y = sinh(x);
|
||||||
break;
|
break;
|
||||||
case 16:
|
case XFU_COSH:
|
||||||
y = cosh(x);
|
y = cosh(x);
|
||||||
break;
|
break;
|
||||||
case 17:
|
case XFU_TANH:
|
||||||
y = tanh(x);
|
y = tanh(x);
|
||||||
break;
|
break;
|
||||||
case 21: /* sgn */
|
case XFU_SGN:
|
||||||
if (x > 0)
|
if (x > 0)
|
||||||
y = 1.;
|
y = 1.;
|
||||||
else if (x == 0)
|
else if (x == 0)
|
||||||
|
|
@ -168,29 +180,29 @@ mathfunction(int f, double z, double x)
|
||||||
else
|
else
|
||||||
y = -1.;
|
y = -1.;
|
||||||
break;
|
break;
|
||||||
case 26:
|
case XFU_CEIL:
|
||||||
y = ceil(x);
|
y = ceil(x);
|
||||||
break;
|
break;
|
||||||
case 27:
|
case XFU_FLOOR:
|
||||||
y = floor(x);
|
y = floor(x);
|
||||||
break;
|
break;
|
||||||
case 28:
|
case XFU_ASIN:
|
||||||
y = asin(x);
|
y = asin(x);
|
||||||
break;
|
break;
|
||||||
case 29:
|
case XFU_ACOS:
|
||||||
y = acos(x);
|
y = acos(x);
|
||||||
break;
|
break;
|
||||||
case 30:
|
case XFU_ATAN:
|
||||||
y = atan(x);
|
y = atan(x);
|
||||||
break;
|
break;
|
||||||
case 31:
|
case XFU_ASINH:
|
||||||
#ifdef HAVE_ASINH
|
#ifdef HAVE_ASINH
|
||||||
y = asinh(x);
|
y = asinh(x);
|
||||||
#else
|
#else
|
||||||
y = ((x > 0) ? log(x + sqrt(x * x + 1.0)) : -log(-x + sqrt(x * x + 1.0)));
|
y = ((x > 0) ? log(x + sqrt(x * x + 1.0)) : -log(-x + sqrt(x * x + 1.0)));
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case 32:
|
case XFU_ACOSH:
|
||||||
#ifdef HAVE_ACOSH
|
#ifdef HAVE_ACOSH
|
||||||
y = acosh(x);
|
y = acosh(x);
|
||||||
#else
|
#else
|
||||||
|
|
@ -201,7 +213,7 @@ mathfunction(int f, double z, double x)
|
||||||
y = (log(x + sqrt(x*x-1.0)));
|
y = (log(x + sqrt(x*x-1.0)));
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case 33:
|
case XFU_ATANH:
|
||||||
#ifdef HAVE_ATANH
|
#ifdef HAVE_ATANH
|
||||||
y = atanh(x);
|
y = atanh(x);
|
||||||
#else
|
#else
|
||||||
|
|
@ -212,7 +224,7 @@ mathfunction(int f, double z, double x)
|
||||||
y = (log((1.0 + x) / (1.0 - x)) / 2.0);
|
y = (log((1.0 + x) / (1.0 - x)) / 2.0);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case 34:
|
case XFU_TAN:
|
||||||
y = tan(x);
|
y = tan(x);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -991,32 +1003,32 @@ opfunctkey(tdico *dico,
|
||||||
switch (kw)
|
switch (kw)
|
||||||
{
|
{
|
||||||
/* & | ~ DIV MOD Defined */
|
/* & | ~ DIV MOD Defined */
|
||||||
case 1:
|
case XKEY_AND:
|
||||||
c = 'A';
|
c = 'A';
|
||||||
state = S_binop;
|
state = S_binop;
|
||||||
level = 6;
|
level = 6;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case XKEY_OR:
|
||||||
c = 'O';
|
c = 'O';
|
||||||
state = S_binop;
|
state = S_binop;
|
||||||
level = 7;
|
level = 7;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case XKEY_NOT:
|
||||||
c = '!';
|
c = '!';
|
||||||
state = S_unop;
|
state = S_unop;
|
||||||
level = 1;
|
level = 1;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case XKEY_DIV:
|
||||||
c = '\\';
|
c = '\\';
|
||||||
state = S_binop;
|
state = S_binop;
|
||||||
level = 3;
|
level = 3;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case XKEY_MOD:
|
||||||
c = '%';
|
c = '%';
|
||||||
state = S_binop;
|
state = S_binop;
|
||||||
level = 3;
|
level = 3;
|
||||||
break;
|
break;
|
||||||
case 6:
|
case XKEY_DEFINED:
|
||||||
c = '?';
|
c = '?';
|
||||||
state = S_atom;
|
state = S_atom;
|
||||||
level = 0;
|
level = 0;
|
||||||
|
|
@ -1228,17 +1240,17 @@ formula(tdico *dico, const char *s, const char *s_end, bool *perror)
|
||||||
u = formula(dico, s, kptr - 1, &error);
|
u = formula(dico, s, kptr - 1, &error);
|
||||||
state = S_atom;
|
state = S_atom;
|
||||||
if (fu > 0) {
|
if (fu > 0) {
|
||||||
if ((fu == 18))
|
if ((fu == XFU_TERNARY_FCN))
|
||||||
u = ternary_fcn(v, w, u);
|
u = ternary_fcn(v, w, u);
|
||||||
else if ((fu == 20))
|
else if ((fu == XFU_AGAUSS))
|
||||||
u = agauss(v, w, u);
|
u = agauss(v, w, u);
|
||||||
else if ((fu == 22))
|
else if ((fu == XFU_GAUSS))
|
||||||
u = gauss(v, w, u);
|
u = gauss(v, w, u);
|
||||||
else if ((fu == 23))
|
else if ((fu == XFU_UNIF))
|
||||||
u = unif(v, u);
|
u = unif(v, u);
|
||||||
else if ((fu == 24))
|
else if ((fu == XFU_AUNIF))
|
||||||
u = aunif(v, u);
|
u = aunif(v, u);
|
||||||
else if ((fu == 25))
|
else if ((fu == XFU_LIMIT))
|
||||||
u = limit(v, u);
|
u = limit(v, u);
|
||||||
else
|
else
|
||||||
u = mathfunction(fu, v, u);
|
u = mathfunction(fu, v, u);
|
||||||
|
|
@ -1260,7 +1272,7 @@ formula(tdico *dico, const char *s, const char *s_end, bool *perror)
|
||||||
c = opfunctkey(dico, kw, c, &state, &level, &error);
|
c = opfunctkey(dico, kw, c, &state, &level, &error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kw == 6) {
|
if (kw == XKEY_DEFINED) {
|
||||||
u = exists(dico, s_end, &s, &error);
|
u = exists(dico, s_end, &s, &error);
|
||||||
}
|
}
|
||||||
} else if (((c == '.') || ((c >= '0') && (c <= '9')))) {
|
} else if (((c == '.') || ((c >= '0') && (c <= '9')))) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue