47#define NAN (0.0 / 0.0)
51#define INFINITY (1.0 / 0.0)
85#define TYPE_MASK(TYPE) ((TYPE) &0x0000001F)
87#define IS_PURE(TYPE) (((TYPE) &TE_FLAG_PURE) != 0)
88#define IS_FUNCTION(TYPE) (((TYPE) &TE_FUNCTION0) != 0)
89#define IS_CLOSURE(TYPE) (((TYPE) &TE_CLOSURE0) != 0)
90#define ARITY(TYPE) (((TYPE) & (TE_FUNCTION0 | TE_CLOSURE0)) ? ((TYPE) &0x00000007) : 0)
91#define NEW_EXPR(type, ...) new_expr((type), (const te_expr *[]){__VA_ARGS__})
99 if (
arity && parameters) {
135static double pi(
void) {
return 3.14159265358979323846; }
136static double e(
void) {
return 2.71828182845904523536; }
137static double fac(
double a) {
142 unsigned int ua = (
unsigned int) (a);
143 unsigned long int result = 1,
i;
144 for (
i = 1;
i <=
ua;
i++) {
149 return (
double) result;
151static double ncr(
double n,
double r) {
152 if (
n < 0.0 || r < 0.0 ||
n < r)
156 unsigned long int un = (
unsigned int) (
n),
ur = (
unsigned int) (r),
i;
157 unsigned long int result = 1;
160 for (
i = 1;
i <=
ur;
i++) {
163 result *=
un -
ur +
i;
168static double npr(
double n,
double r) {
return ncr(
n, r) *
fac(r); }
171#pragma function(ceil)
172#pragma function(floor)
243static double add(
double a,
double b) {
return a + b; }
244static double sub(
double a,
double b) {
return a - b; }
245static double mul(
double a,
double b) {
return a * b; }
246static double divide(
double a,
double b) {
return a / b; }
247static double negate(
double a) {
return -a; }
248static double comma(
double a,
double b) {
264 if ((s->
next[0] >=
'0' && s->
next[0] <=
'9') || s->
next[0] ==
'.') {
314 switch (s->
next++[0]) {
483#ifdef TE_POW_FROM_RIGHT
580#define TE_FUN(...) ((double (*)(__VA_ARGS__)) n->function)
581#define M(e) te_eval(n->parameters[e])
600 case 0:
return TE_FUN(
void)();
601 case 1:
return TE_FUN(
double)(
M(0));
602 case 2:
return TE_FUN(
double,
double)(
M(0),
M(1));
603 case 3:
return TE_FUN(
double,
double,
double)(
M(0),
M(1),
M(2));
604 case 4:
return TE_FUN(
double,
double,
double,
double)(
M(0),
M(1),
M(2),
M(3));
605 case 5:
return TE_FUN(
double,
double,
double,
double,
double)(
M(0),
M(1),
M(2),
M(3),
M(4));
606 case 6:
return TE_FUN(
double,
double,
double,
double,
double,
double)(
M(0),
M(1),
M(2),
M(3),
M(4),
M(5));
607 case 7:
return TE_FUN(
double,
double,
double,
double,
double,
double,
double)(
M(0),
M(1),
M(2),
M(3),
M(4),
M(5),
M(6));
620 case 0:
return TE_FUN(
void *)(
n->parameters[0]);
621 case 1:
return TE_FUN(
void *,
double)(
n->parameters[1],
M(0));
622 case 2:
return TE_FUN(
void *,
double,
double)(
n->parameters[2],
M(0),
M(1));
623 case 3:
return TE_FUN(
void *,
double,
double,
double)(
n->parameters[3],
M(0),
M(1),
M(2));
624 case 4:
return TE_FUN(
void *,
double,
double,
double,
double)(
n->parameters[4],
M(0),
M(1),
M(2),
M(3));
625 case 5:
return TE_FUN(
void *,
double,
double,
double,
double,
double)(
n->parameters[5],
M(0),
M(1),
M(2),
M(3),
M(4));
626 case 6:
return TE_FUN(
void *,
double,
double,
double,
double,
double,
double)(
n->parameters[6],
M(0),
M(1),
M(2),
M(3),
M(4),
M(5));
627 case 7:
return TE_FUN(
void *,
double,
double,
double,
double,
double,
double,
double)(
n->parameters[7],
M(0),
M(1),
M(2),
M(3),
M(4),
M(5),
M(6));
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
const te_variable * lookup
static double ncr(double n, double r)
static te_expr * factor(state *s)
double te_interp(const char *expression, int *error)
static const te_variable functions[]
static double npr(double n, double r)
static double negate(double a)
static const te_variable * find_builtin(const char *name, int len)
static const te_variable * find_lookup(const state *s, const char *name, int len)
static double comma(double a, double b)
static double mul(double a, double b)
static te_expr * term(state *s)
double te_eval(const te_expr *n)
static double sub(double a, double b)
static te_expr * expr(state *s)
te_expr * te_compile(const char *expression, const te_variable *variables, int var_count, int *error)
static te_expr * power(state *s)
void next_token(state *s)
double(* te_fun2)(double, double)
static te_expr * new_expr(const int type, const te_expr *parameters[])
void te_free_parameters(te_expr *n)
#define NEW_EXPR(type,...)
static double divide(double a, double b)
static double fac(double a)
static void pn(const te_expr *n, int depth)
static te_expr * base(state *s)
static te_expr * list(state *s)
void te_print(const te_expr *n)