operator ~/ method

  1. @override
Number operator ~/(
  1. dynamic divisor
)
override

The truncating division operator.

Implementation

@override
Number operator ~/(dynamic divisor) {
  if (divisor == 0) return value < 0 ? Imaginary(Double.negInfinity) : Imaginary(Double.infinity);
  if (divisor is num) return Number.simplifyType(Imaginary(value ~/ divisor));
  if (divisor is Imaginary) return Number.simplifyType(value ~/ divisor.value);
  if (divisor is Real) return Number.simplifyType(Imaginary(value ~/ divisor.value));
  if (divisor is Complex) {
    // (a + bi) / (c + di) = (ac + bd) / (c^2 + d^2) + i * (bc - ad) / (c^2 + d^2)
    // for a = 0 => bi / (c + di) = bd / (c^2 + d^2) + i * bc / (c^2 + d^2)
    final bOverc2d2 = value / (divisor.real ^ 2.0) + (divisor.imaginary.value ^ 2.0);
    return Number.simplifyType(Complex((bOverc2d2 * divisor.real).truncate() as Real,
        Imaginary((bOverc2d2 * divisor.imaginary.value * -1.0).truncate())));
  }

  // Treat divisor as 0.
  return value < 0 ? Imaginary(Double.negInfinity) : Imaginary(Double.infinity);
}