Esempio n. 1
0
File: eval.cpp Progetto: kebekus/srt
	float eval_branch(struct node *node, float x, float y, float z, float a)
	{
		switch (node->token) {
			case token_x:
				return x;
			case token_y:
				return y;
			case token_z:
				return z;
			case token_a:
				return a;
			case token_num:
				return node->value;
			case token_pow:
				return func_pow(eval_branch(node->left, x, y, z, a), node->value);
			case token_mul:
				return func_mul(eval_branch(node->left, x, y, z, a), eval_branch(node->right, x, y, z, a));
			case token_div:
				return func_div(eval_branch(node->left, x, y, z, a), eval_branch(node->right, x, y, z, a));
			case token_add:
				return func_add(eval_branch(node->left, x, y, z, a), eval_branch(node->right, x, y, z, a));
			case token_sub:
				return func_sub(eval_branch(node->left, x, y, z, a), eval_branch(node->right, x, y, z, a));
			case token_neg:
				return func_neg(0, eval_branch(node->right, x, y, z, a));
			case token_sqrt:
				return func_sqrt(0, eval_branch(node->right, x, y, z, a));
			case token_sin:
				return func_sin(0, eval_branch(node->right, x, y, z, a));
			case token_cos:
				return func_cos(0, eval_branch(node->right, x, y, z, a));
			default:
				return 0;
		}
	}
Esempio n. 2
0
func_t *func_add_eval(func_t *f)
{
  func_t *g;
  if(!func_is_add(f)){ FUNC_ERROR_ARG1("func_add_eval",f); }
  f=func_flatten(f,__func_add);
  func_add_args(f,func_is_complex,func_is_number);
  func_add_args(f,func_is_real,func_is_number);
  func_add_args(f,func_in_bigint,func_in_bigint);
  func_add_args_collect(f,func_in_complex);
  func_add_args_collect(f,func_is_number);
  func_a_rm_op(f,func_is_zero);
  func_args_sort(f);
  func_args_reverse(f);
  if     (func_asize(f)<=0){ f=func_del(f); return func_zero(); }
  else if(func_asize(f)==1){ g=func_pow(FR(func_aget(f,0)),func_bigint_int(func_power(f),1)); f=func_del(f); return g; }
  else                     { return f; }
}