[
https://issues.apache.org/jira/browse/MATH-1118?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Luc Maisonobe resolved MATH-1118.
---------------------------------
Resolution: Fixed
Fix Version/s: (was: 3.3)
3.6
4.0
Fixed in git repository on both the master branch and the 3.X branch.
Thanks for the reminding.
> Complex: semantics of equals != Double equals, mismatch with hashCode
> ---------------------------------------------------------------------
>
> Key: MATH-1118
> URL: https://issues.apache.org/jira/browse/MATH-1118
> Project: Commons Math
> Issue Type: Bug
> Affects Versions: 3.2
> Environment: Mac OS 10.9, Java 6, 7
> Reporter: Cyrille Artho
> Fix For: 4.0, 3.6
>
> Attachments: MATH-1118.patch, MATH-1118.patch, Report5.java,
> Report5a.java
>
>
> Two complex numbers with real/imaginary parts 0.0d but different signs
> compare as equal numbers. This is according to their mathematical value; the
> comparison is done via
> return (real == c.real) && (imaginary == c.imaginary);
> Unfortunately, two Double values do NOT compare as equal in that case, so
> real.equals(c.real) would return false if the signs differ.
> This becomes a problem because for the hashCode, MathUtils.hash is used on
> the real and imaginary parts, which in turn uses Double.hash.
> This violates the contract on equals/hashCode, so Complex numbers cannot be
> used in a hashtable or similar data structure:
> Complex c1 = new Complex(0.0, 0.0);
> Complex c2 = new Complex(0.0, -0.0);
> // Checks the contract: equals-hashcode on c1 and c2
> assertTrue("Contract failed: equals-hashcode on c1 and c2", c1.equals(c2)
> ? c1.hashCode() == c2.hashCode() : true);
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)