operator * method

  1. @override
Number operator *(
  1. dynamic multiplicand
)
override

Returns the product of this Number and the multiplicand (a Number or num). This Number is unaffected.

Implementation

@override
Number operator *(dynamic multiplicand) {
  // i * i = -1
  if (multiplicand is Imaginary) return Number.simplifyType(value * multiplicand.value * -1);
  if (multiplicand is num) return Number.simplifyType(Imaginary(value * multiplicand));
  if (multiplicand is Real) return Number.simplifyType(Imaginary(multiplicand * value));
  if (multiplicand is Complex) {
    // ai * (b + ci) = -ac + abi
    final real = value * multiplicand.imag.value.toDouble() * -1.0 as Real;
    final imag = value * multiplicand.real as Real;
    if (imag.toDouble() == 0) return Number.simplifyType(real);
    if (real.toDouble() == 0) return Number.simplifyType(Imaginary(imag));
    return Number.simplifyType(Complex(real, Imaginary(imag)));
  }

  return Imaginary(0);
}