Rational constructor
Implementation
factory Rational(BigInt numerator, [BigInt? denominator]) {
denominator ??= _i1;
if (denominator == _i0) throw ArgumentError();
if (numerator == _i0) return Rational._normalized(_i0, _i1);
if (denominator < _i0) {
numerator = -numerator;
denominator = -denominator;
}
final aNumerator = numerator.abs();
final aDenominator = denominator.abs();
final gcd = aNumerator.gcd(aDenominator);
return (gcd == _i1)
? Rational._normalized(numerator, denominator)
: Rational._normalized(numerator ~/ gcd, denominator ~/ gcd);
}