mul method
Implementation
void mul( MPData ret, MPData a, MPData b ){
a = clone( a );
b = clone( b );
int k = 1;
if( a.val(0) < 0 && b.val(0) >= 0 ){ k = -1; }
if( b.val(0) < 0 && a.val(0) >= 0 ){ k = -1; }
int la = getLen( a );
int lb = getLen( b );
if( la == 0 || lb == 0 ){
ret.set( 0, 0 );
return;
}
int c = 0;
if( la == 1 ){
c = _mul1n( ret, b, a.val(1), lb );
} else if( lb == 1 ){
c = _mul1n( ret, a, b.val(1), la );
} else {
_fill( 0, ret, 1, la + lb );
int aa, bb = 0;
int i, j, x;
for( j = 1; j <= lb; j++ ){
c = 0;
bb++;
aa = 0;
for( i = 1; i <= la; i++ ){
x = a.val(++aa) * b.val(bb) + ret.val(i + j - 1) + c;
ret.set( i + j - 1, ClipMath.imod( x, element ) );
c = x ~/ element;
}
ret.set( i + j - 1, c );
}
}
_setLen( ret, (c != 0 ? la + lb : la + lb - 1) * k );
}