mpPow method

void mpPow(
  1. ClipParam param,
  2. MPData ret,
  3. MPData x,
  4. int y,
)

Implementation

void mpPow( ClipParam param, MPData ret, MPData x, int y ){
	x = _procMp.clone( x );
	if( param.mode() == ClipGlobal.modeFMultiPrec ){
/*
		_procMp.fset( ret, x );
		for( int i = 1; i < y; i++ ){
			_procMp.fmul( ret, ret, x, param.mpPrec() + 1 );
		}
*/
		_procMp.fset( ret, _procMp.F( "1.0" ) );
		while( y > 0 ){
			if( (y % 2) == 0 ){
				_procMp.fmul( x, x, x, param.mpPrec() + 1 );
				y = y ~/ 2;
			} else {
				_procMp.fmul( ret, ret, x, param.mpPrec() + 1 );
				y--;
			}
		}
	} else {
/*
		_procMp.set( ret, x );
		for( int i = 1; i < y; i++ ){
			_procMp.mul( ret, ret, x );
		}
*/
		_procMp.set( ret, _procMp.I( "1" ) );
		while( y > 0 ){
			if( (y % 2) == 0 ){
				_procMp.mul( x, x, x );
				y = y ~/ 2;
			} else {
				_procMp.mul( ret, ret, x );
				y--;
			}
		}
	}
}