operator * method
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');
}
}