ComplexNumberPackage must support the following operators:
Let z1 = x1 + y1j and z2 = x2 + y2j.
- ==: z1 == z2 if and only if x1 = x2 and y1 = y2.
- +: z1 + z2 = (x1 + x2) + (y1 + y2)j
- -: z1 - z2 = (x1 - x2) + (y1 - y2)j
- *: z1 * z2 = (x1x2 - y1y2) + (x1y2 + x2y1)j
- /: z1 / z2 = ((x1x2 + y1y2)/(x2^2 + y2^2)) + ((x2y1 - x1y2)/(x2^2 + y2^2))j (for z2 ~= 0).
It must also handle coefficients (real and imaginary) with an arbitrary mix of the following primitive types:
- byte: 8-bit signed 2's-complement integer
- short: 16-bit signed 2's-complement integer
- int: 32-bit signed 2's-complement integer
- long: 64-bit signed 2's-complement integer
- float: 32-bit IeeeSevenFiftyFour-1985 floating-point number
- double: 32-bit IeeeSevenFiftyFour-1985 floating-point number
Each of the arithmetic operations must operate correctly when applied to any non-complex argument -- ie: (1.2 + 3.4j) + 5 = (6.2 + 3.4j).
Each of the arithmetic operations must, of course, be commutative, including with mixed arguments -- ie: (A + Bj) * C == C * (A + Bj) and so on.
If any of us get truly motivated, we should probably write ComplexNumberPackageUnitTest that must be passed by a putative candidate. We then contrast and compare the performance of packages that pass the unit test.
See also ComplexNumbers, ComplexNumberTest
CategoryMath