[
https://issues.apache.org/jira/browse/MATH-471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12981091#action_12981091
]
Sebb commented on MATH-471:
---------------------------
Yes, I think the 3rd example is not relevant to the immediate problem (although
indirectly it was what alerted me to the problem).
Though it may perhaps be worthwhile noting the conversion issue somewhere in
the Javadoc - perhaps at class level?
> 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
> 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.
-
You can reply to this email to add a comment to the issue online.