modAndAss method

MathFract modAndAss(
  1. dynamic r
)

Implementation

MathFract modAndAss( dynamic r ){
	if( r is MathFract ){
		if( _de == 0 ){
		} else if( r._de == 0 ){
			_nu = r._nu;
			_de = r._de;
		} else {
			double de = ClipMath.lcm( _de, r._de );
			double d = r._nu * de / r._de;
			if( d == 0.0 ){
				_de = 0;
			} else {
				_set( ClipMath.fmod( _nu * de / _de, d ), de );
			}
		}
	} else {
		double rr = ClipMath.toDouble(r);
		double t = (rr < 0.0) ? -rr : rr;
		if( t == ClipMath.toInt( t ) ){
			if( _de == 0 ){
			} else if( t == 0.0 ){
				_nu = 0;
				_de = 0;
			} else {
				_set( ClipMath.fmod( _nu, t * _de ), _de );
			}
		} else {
			modAndAss( floatToFract( rr ) );
		}
	}
	return this;
}