add method
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 );
}