+ if (a->m_next_factor != NULL || b->m_next_factor != NULL)
+ {
+ digit_t aa(a->Head<digit_t>());
+ digit_t ab = (a->m_next_factor != NULL) ? a->m_next_factor->Head<digit_t>() : 1;
+ digit_t bc(b->Head<digit_t>());
+ digit_t bd = (b->m_next_factor != NULL) ? b->m_next_factor->Head<digit_t>() : 1;
+ Optype aop = (a->m_next_factor != NULL) ? a->m_next_factor->m_op : DIVIDE;
+ Optype cop = (b->m_next_factor != NULL) ? b->m_next_factor->m_op : DIVIDE;
+ simplify = CombineTerms<digit_t>(aa, aop, ab, bc, cop, bd);
+ if (simplify)
+ {
+ a->m_value = aa;
+ if (a->m_next_factor != NULL)
+ a->m_next_factor->m_value = ab;
+ else if (ab != 1)
+ {
+ a->m_next_factor = b->m_next_factor;
+ b->m_next_factor = NULL;
+ a->m_next_factor->m_value = ab;
+ }
+ }
+ }
+ else
+ {
+ simplify = ParanoidOp<digit_t>(a->m_value, b->Head<digit_t>(), ADD);
+ }