summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
1f7f3c8)
This shuts a few 'comparison between signed and unsigned integer expressions'
warnings.
intvector k(m-1);
intvector k_cum(m-1); // k_cum[l]:=sum(i=0,l,k[l]);
intvector upper_limit(m-1);
intvector k(m-1);
intvector k_cum(m-1); // k_cum[l]:=sum(i=0,l,k[l]);
intvector upper_limit(m-1);
for (size_t l=0; l<m-1; ++l) {
k[l] = 0;
for (size_t l=0; l<m-1; ++l) {
k[l] = 0;
while (true) {
exvector term;
term.reserve(m+1);
while (true) {
exvector term;
term.reserve(m+1);
- for (l=0; l<m-1; ++l) {
+ for (std::size_t l = 0; l < m - 1; ++l) {
const ex & b = a.op(l);
GINAC_ASSERT(!is_exactly_a<add>(b));
GINAC_ASSERT(!is_exactly_a<power>(b) ||
const ex & b = a.op(l);
GINAC_ASSERT(!is_exactly_a<add>(b));
GINAC_ASSERT(!is_exactly_a<power>(b) ||
term.push_back(power(b,k[l]));
}
term.push_back(power(b,k[l]));
}
- const ex & b = a.op(l);
+ const ex & b = a.op(m - 1);
GINAC_ASSERT(!is_exactly_a<add>(b));
GINAC_ASSERT(!is_exactly_a<power>(b) ||
!is_exactly_a<numeric>(ex_to<power>(b).exponent) ||
GINAC_ASSERT(!is_exactly_a<add>(b));
GINAC_ASSERT(!is_exactly_a<power>(b) ||
!is_exactly_a<numeric>(ex_to<power>(b).exponent) ||
term.push_back(power(b,n-k_cum[m-2]));
numeric f = binomial(numeric(n),numeric(k[0]));
term.push_back(power(b,n-k_cum[m-2]));
numeric f = binomial(numeric(n),numeric(k[0]));
+ for (std::size_t l = 1; l < m - 1; ++l)
f *= binomial(numeric(n-k_cum[l-1]),numeric(k[l]));
term.push_back(f);
f *= binomial(numeric(n-k_cum[l-1]),numeric(k[l]));
term.push_back(f);
result.push_back(ex((new mul(term))->setflag(status_flags::dynallocated)).expand(options));
// increment k[]
result.push_back(ex((new mul(term))->setflag(status_flags::dynallocated)).expand(options));
// increment k[]
- l = m-2;
- while ((l>=0) && ((++k[l])>upper_limit[l])) {
+ bool done = false;
+ std::size_t l = m - 2;
+ while ((++k[l]) > upper_limit[l]) {
+ if (l != 0)
+ --l;
+ else {
+ done = true;
+ break;
+ }
// recalc k_cum[] and upper_limit[]
k_cum[l] = (l==0 ? k[0] : k_cum[l-1]+k[l]);
// recalc k_cum[] and upper_limit[]
k_cum[l] = (l==0 ? k[0] : k_cum[l-1]+k[l]);