[ 
https://issues.apache.org/jira/browse/NUMBERS-139?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Herbert resolved NUMBERS-139.
----------------------------------
    Fix Version/s: 1.0
       Resolution: Done

All missing operators have been added to git master.

> 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
>            Priority: Minor
>             Fix For: 1.0
>
>
> [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)

Reply via email to