bool CNormalSum::add(const CNormalSum& sum) { std::set<CNormalProduct*, compareProducts>::const_iterator itProduct; std::set<CNormalProduct*, compareProducts>::const_iterator itProductEnd = sum.getProducts().end(); for (itProduct = sum.getProducts().begin(); itProduct != itProductEnd; ++itProduct) add(**itProduct); std::set<CNormalFraction*>::const_iterator itFraction; std::set<CNormalFraction*>::const_iterator itFractionEnd = sum.getFractions().end(); for (itFraction = sum.getFractions().begin(); itFraction != itFractionEnd; ++itFraction) add(**itFraction); return true; }
/** * Multiply this product with a sum NOT CONTAINING FRACTIONS!. * @return sum. */ CNormalSum* CNormalProduct::multiply(const CNormalSum& sum) { if (fabs(mFactor) < 1.0E-100) { CNormalSum* zeroSum = new CNormalSum(); zeroSum->add(*this); return zeroSum; } CNormalSum* tmp = new CNormalSum(sum); CNormalSum* newsum = new CNormalSum(); std::set<CNormalProduct*, compareProducts>::const_iterator it; std::set<CNormalProduct*, compareProducts>::const_iterator itEnd = tmp->getProducts().end(); for (it = tmp->getProducts().begin(); it != itEnd; ++it) { (*it)->multiply(*this); newsum->add(**it); } delete tmp; return newsum; }