Rational constructor

Rational(
  1. BigInt numerator, [
  2. BigInt? denominator
])

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);
}