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