mul method

  1. @override
void mul(
  1. MPData ret,
  2. MPData a,
  3. 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 );
}