mul method
void
mul(
- MPData ret,
- MPData a,
- MPData b
)
override
Implementation
@override
void mul( MPData ret, MPData a, MPData b ){
a = clone( a );
b = clone( b );
bool isMinus = false;
if( a.val(0) < 0 && b.val(0) >= 0 ){ isMinus = true; }
if( b.val(0) < 0 && a.val(0) >= 0 ){ isMinus = true; }
int la = getLen( a );
int lb = getLen( b );
if( la == 0 || lb == 0 ){
ret.set( 0, 0 );
return;
}
int n = la + lb;
ret.set( n + 1, 0 ); // 配列の確保
List<int> r = ret.data();
conv( r, 1, n, a.data(), 1, la, b.data(), 1, lb );
int i = 1, c = 0, rr;
for( ; i < n; i++ ){
rr = r[i] + c;
r[i] = ClipMath.imod( rr, MultiPrec.element );
c = rr ~/ MultiPrec.element;
}
r[i] = c;
setLen( ret, c != 0 ? n : n - 1, isMinus );
}