commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arne Ploese <aplo...@gmx.de>
Subject Re: [math] add Complex.toString() and Howto handle NaN values properly
Date Tue, 12 Jul 2011 15:49:07 GMT
Am Dienstag, den 12.07.2011, 16:24 +0200 schrieb Gilles Sadowski: 
> Hello.
> 
> > I try to add the method toString() to Complex.
> 
> I've created an issue for this:
>   https://issues.apache.org/jira/browse/MATH-614

I would prefer something like:
>>>return Double.valueOf(real) + imaginary < 0 ? " - " : " + "  +
Double.valueOf(Math.abs(imaginary)) + "i";<<<

this would format the values in the same way any double would be
formatted. 

> With the "ComplexFormat" class, the "toString" method should be trivial to
> add to the "Complex" class.
> [This is already done in my working copy of the code.]
> Please, let me know whether you agree with what I propose in the issue's
> description.
> 
> > There some issues arise:
> > 
> > If ether the real or imaginary part is NaN hashCode() will return the
> > same value. Complex.toString() should return Double.valueOf(Double.NaN).
> > Is thee a need to store the given values of the real/imaginary part? or
> > set both to Double.NaN in the constructor?
> > Maybe drop the constructor completely, make createComplex(...) public
> > and return in this case Complex.NaN which is then the marker for NaN
> > values?
> 
> I don't understand how this affects the code of a "toString" method.

If two Objects are equal they should have the same hash code thus
toString() should be also equal, meaning that all properties equal....

given the complex numbers 

a = new Complex(Double.NaN, 3);
b = new Complex(6, Double.NaN);

both are equals and have the same hash code.
Personally I think this is wrong in the first place because a is not
equal b. So equals() and hashCode() must be changed.


What should the outcome of a.toString() be?

"NaN" or "NaN + 3i"?

> 
> > the methods add/subtract handle NaN values different one will return
> > Complex.NaN the other will calculate the result and result.isNaN() ==
> > true. This makes in my opinion no sense, because result.hashCode() ==
> > Complex.NaN,hashCode()...
> 
> This is not clear to me.
> Please write different posts for different issues.

I think if we find a solution for the upper this can be fixed
accordingly...

> 
> 
> Thanks,
> Gilles
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message