fdiv method

bool fdiv(
  1. MPData ret,
  2. MPData a,
  3. MPData b,
  4. int prec,
)

Implementation

bool fdiv( MPData ret, MPData a, MPData b, int prec ){
	a = clone( a );
	b = clone( b );

	int p = _matchPrec( a, b );
	int k = b.val(0) < 0 ? -1 : 1;
	int l = getLen( b );
	int i;
	for( i = l; i > 0; i-- ){
		if( b.val(i) != 0 ){ break; }
	}
	if( i == 0 ){ return true; }
	if( i != l ){
		p -= (l - i) * digit;
		_setPrec( a, p );
		_setPrec( b, p );
		_setLen( b, i * k );
	}

	MPData q = MPData();
	MPData r = MPData();
	div( q, a, b, r );
	int t = _fmul( q, prec );
	_fmul( r, prec );
	if( t > 0 ){
		MPData k = MPData();
		_fcoef( k, t );
		mul( q, q, k );
		mul( r, r, k );
	}
	div( r, r, b );
	add( ret, q, r );
	_setPrec( ret, prec );
	return false;
}