fsqrt3 method

bool fsqrt3(
  1. MPData ret,
  2. MPData a,
  3. int prec
)

Implementation

bool fsqrt3( MPData ret, MPData a, int prec ){
	a = clone( a );
	int t = prec * 2 - getPrec( a );
	int u;
	if( t > 0 ){
		if( (u = _fmul( a, t )) > 0 ){
			MPData k = MPData();
			_fcoef( k, u ); mul( a, a, k );
		}
	} else if( t < 0 ){
		u = _abs( t );
		int n;
		if( (n = u ~/ digit) > 0 ){
			u -= n * digit;
			_fdiv( a, n );
		}
		MPData k = MPData();
		_fcoef( k, u ); div( a, a, k );
	}
	if( a.val(getLen( a )) == 0 ){
		_setLen( a, getLen( a ) - 1 );
	}
	bool r = sqrt( ret, a );
	_setPrec( ret, prec );
	return r;
}