operator * method

  1. @override
Cartesian operator *(
  1. Object factor
)
override

Returns a Complex whose value is this * factor. Implements preliminary checks for NaN and infinity followed by the definitional formula:

(a + bi)(c + di) = (ac - bd) + (ad + bc)i

Returns nan if either this or factor has one or more NaN parts.

Returns infinity if neither this nor factor has one or more NaN parts and if either this or factor has one or more infinite parts (same result is returned regardless of the sign of the components).

Returns finite values in components of the result per the definitional formula in all remaining cases.

Implementation

@override
Cartesian operator *(Object factor) {
  if (factor is Cartesian) {
    if (isNaN || factor.isNaN) {
      return Complex.nan;
    }
    if (real.isInfinite ||
        imaginary.isInfinite ||
        factor.real.isInfinite ||
        factor.imaginary.isInfinite) {
      // we don't use isInfinite to avoid testing for NaN again
      return Complex.infinity;
    }
    return Cartesian(real * factor.real - imaginary * factor.imaginary,
        real * factor.imaginary + imaginary * factor.real);
  } else if (factor is num) {
    if (isNaN || factor.isNaN) {
      return Complex.nan;
    }
    if (real.isInfinite || imaginary.isInfinite || factor.isInfinite) {
      // we don't use isInfinite to avoid testing for NaN again
      return Complex.infinity;
    }
    return Cartesian(real * factor, imaginary * factor);
  } else {
    throw ArgumentError('factor must be a num or a Complex');
  }
}