You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Luc Maisonobe (JIRA)" <ji...@apache.org> on 2011/03/23 21:33:05 UTC

[jira] [Closed] (MATH-471) MathUtils.equals(double, double) does not work properly for floats

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

Luc Maisonobe closed MATH-471.
------------------------------


Closing issue as it was included in version 2.2, which has been released

> MathUtils.equals(double, double) does not work properly for floats
> ------------------------------------------------------------------
>
>                 Key: MATH-471
>                 URL: https://issues.apache.org/jira/browse/MATH-471
>             Project: Commons Math
>          Issue Type: Bug
>            Reporter: Sebb
>             Fix For: 2.2, 3.0
>
>         Attachments: Math471.patch
>
>
> MathUtils.equals(double, double) does not work properly for floats.
> There is no equals(float,float) so float parameters are automatically promoted to double. However, that is not necessarily appropriate, given that the ULP for a double is much smaller than the ULP for a float.
> So for example:
> {code}
> double oneDouble = 1.0d;
> assertTrue(MathUtils.equals(oneDouble, Double.longBitsToDouble(1 + Double.doubleToLongBits(oneDouble)))); // OK
> float oneFloat = 1.0f;
> assertTrue(MathUtils.equals(oneFloat, Float.intBitsToFloat(1 + Float.floatToIntBits(oneFloat)))); // FAILS
> float  f1 = 333.33334f;
> double d1 = 333.33334d;
> assertTrue(MathUtils.equals(d1, f1)); // FAILS
> {code}
> I think the equals() methods need to be duplicated with the appropriate changes for floats to avoid any problems with the promotion of floats.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira