add method

void add(
  1. MPData ret,
  2. MPData a,
  3. MPData b
)

Implementation

void add( MPData ret, MPData a, MPData b ){
	a = clone( a );
	b = clone( b );

	if( a.val(0) < 0 && b.val(0) >= 0 ){
		a.set( 0, -a.val(0) );
		sub( ret, b, a );
		return;
	} else if( a.val(0) >= 0 && b.val(0) < 0 ){
		b.set( 0, -b.val(0) );
		sub( ret, a, b );
		return;
	}
	int k = (a.val(0) < 0 && b.val(0) < 0) ? -1 : 1;

	int la = getLen( a );
	int lb = getLen( b );
	int lr = (la >= lb) ? la : lb;
	ret.set( lr + 1, 0 ); // 配列の確保

	int r = 0, aa = 0, bb = 0, x = 0;
	for( int i = 1; i <= lr; i++ ){
		if( i <= la ){ x += a.val(++aa); }
		if( i <= lb ){ x += b.val(++bb); }
		if( x < element ){
			ret.set( ++r, x );
			x = 0;
		} else {
			ret.set( ++r, x - element );
			x = 1;
		}
	}
	if( x != 0 ){
		ret.set( ++r, x );
		lr++;
	}

	_setLen( ret, lr * k );
}