You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Alex Herbert (Jira)" <ji...@apache.org> on 2019/12/08 01:35:00 UTC
[jira] [Created] (NUMBERS-139) Complex Multiplicative and Additive
operators
Alex Herbert created NUMBERS-139:
------------------------------------
Summary: Complex Multiplicative and Additive operators
Key: NUMBERS-139
URL: https://issues.apache.org/jira/browse/NUMBERS-139
Project: Commons Numbers
Issue Type: Improvement
Components: complex
Affects Versions: 1.0
Reporter: Alex Herbert
Assignee: Alex Herbert
[ISO C99|http://www.open-std.org/JTC1/SC22/WG14/www/standards] Annex G specifies the multiplicative (G.5.1) and additive operators (G.5.2) in the case where the first or second argument is a real or an imaginary number. The following methods are already implemented:
{code:java}
multiply(Complex)
multiply(double)
divide(Complex)
divide(double)
add(Complex)
add(double)
subtract(Complex)
subtract(double)
{code}
Add the following methods:
{code:java}
multiplyImaginary(double)
divideImaginary(double)
addImaginary(double)
subtractImaginary(double)
subtractFrom(double)
subtractFromImaginary(double)
{code}
The final cases are important to maintain the negation of the sign of the component not involved in the computation.
This computation:
{noformat}
1 - (a + b i) = (1 - a) - b i
{noformat}
Is not correct for {{b=0}} using e.g.:
{code:java}
new Complex(1, 0).subtract(new Complex(3, 0));
{code}
The result is (-2, 0) but it should be (-2, -0).
Using the Complex involves zero subtraction for the imaginary part {{0 - 0}} but a special method would just use {{-0}} and negate the sign.
Note: In ISO compliant C++ the use of a complex makes no special preservation of the sign of the negative:
{code:c++}
1.0 - complex<double>(3, 0.0) == -2 + -0 i
1.0 - complex<double>(3, -0.0) == -2 + 0 i
complex<double>(1, 0) - complex<double>(3, 0.0) == -2 + 0 i
complex<double>(1, 0) - complex<double>(3, -0.0) == -2 + 0 i
{code}
The first case listed above is not possible with the current API.
The method subtractFrom(Complex) would have an identical result as using subtract(Complex) and so adds no functional value to the API and is omitted.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)