Skip to content

Commit 1235a32

Browse files
committed
trying to simplify terms
1 parent d7322ff commit 1235a32

1 file changed

Lines changed: 24 additions & 21 deletions

File tree

derive.c

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -543,34 +543,37 @@ expr *simplifyFrac(expr *f, expr *sym) {
543543
return frac(numer, denom);
544544
}
545545

546-
expr *simplifyAdd(expr *f, expr *sym) {
547-
expr *left = simplify(f->left, sym);
548-
expr *right = simplify(f->right, sym);
549-
if (eq(left, zero)) { release(left); return right; }
550-
if (eq(right, zero)) { release(right); return left; }
551-
if (is(left, EXPR_NUM) && is(right, EXPR_NUM)) {
552-
double res = left->num + right->num;
553-
release(left); release(right);
546+
expr *removeAddTerm(expr **left, expr **right, expr *sym) {
547+
*left = simplify(*left, sym);
548+
*right = simplify(*right, sym);
549+
550+
if (eq(*left, zero)) {
551+
release(*left); return *right;
552+
} else if (eq(*right, zero)) {
553+
release(*right); return *left;
554+
} else if (is(*left, EXPR_NUM) && is(*right, EXPR_NUM)) {
555+
double res = (*left)->num + (*right)->num;
556+
release(*left); release(*right);
554557
return num(res);
555-
}
556-
if (eq(left, right)) {
557-
release(left);
558-
return mul(two, right);
559-
}
560-
if (is(right, EXPR_NEG)) {
561-
expr *tmp = retain(right->unary);
562-
release(right);
563-
return simplify(sub(left, tmp), sym);
558+
} else if (eq(*left, *right)) {
559+
release(*right);
560+
return mul(two, *left);
564561
}
565562

566-
if ((contains(left, sym) && !contains(right, sym)) ||
567-
(grade(left) < grade(right))) {
568-
expr *tmp = left;
563+
if ((contains(*left, sym) && !contains(*right, sym)) ||
564+
(grade(*left) < grade(*right))) {
565+
expr **tmp = left;
569566
left = right;
570567
right = tmp;
571568
}
572569

573-
return add(left, right);
570+
return add(*left, *right);
571+
}
572+
573+
expr *simplifyAdd(expr *f, expr *sym) {
574+
expr *left = f->left;
575+
expr *right = f->right;
576+
return removeAddTerm(&left, &right, sym);
574577
}
575578

576579
expr *simplifySub(expr *f, expr *sym) {

0 commit comments

Comments
 (0)