[Home]
[Contents]
[Chapter]
[Previous Algorithm]
[Next Algorithm]


Multiple-precision multiplication


mulint( a, b, c ) mp a, b, c; /*** multiply two integers. a*b-->c ***/ {int i, j, la, lb; /*** b and c may coincide ***/ la = length(a); lb = length(b); for (i=0; i<la-2; i++) c[lb+i] = 0; for (i=lb-1; i>0; i--) { for (j=2; j<la; j++) if ( (c[i+j-1] += b[i]*a[j]) > MAXD-(BASE-1)*(BASE-1)-MAXD/BASE ) { c[i+j-1] -= (MAXD/BASE)*BASE; c[i+j] += MAXD/BASE; } c[i] = b[i]*a[1]; } storelength( c, la+lb-2 ); storesign( c, sign(a)==sign(b) ? POS : NEG ); normalize( c ); };

C source (61.mult.c)



© Addison-Wesley Publishing Co. Inc.