KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I wrote a class that tests for equality, less than, and greater than with two doubles in Java. My general case is comparing price that can have an accuracy of a half cent. 59.005 compared to 59.395. Is the epsilon I chose adequate for those cases? private final static double EPSILON = 0.00001; /** * Returns true if two doubles are considered equal. Tests if the absolute * difference between two doubles has a difference less then .00001. This * should be fine when comparing prices, because prices have a precision of * .001. * * @param a double to compare. * @param b double to compare. * @return true true if two doubles are considered equal. */ public static boolean equals(double a, double b){ return a == b ? true : Math.abs(a - b) < EPSILON; } /** * Returns true if two doubles are considered equal. Tests if the absolute * difference between the two doubles has a difference less then a given * double (epsilon). Determining the given epsilon is highly dependant on the * precision of the doubles that are being compared. * * @param a double to compare. * @param b double to compare * @param epsilon double which is compared to the absolute difference of two * doubles to determine if they are equal. * @return true if a is considered equal to b. */ public static boolean equals(double a, double b, double epsilon){ return a == b ? true : Math.abs(a - b) < epsilon; } /** * Returns true if the first double is considered greater than the second * double. Test if the difference of first minus second is greater then * .00001. This should be fine when comparing prices, because prices have a * precision of .001. * * @param a first double * @param b second double * @return true if the first double is considered greater than the second * double */ public static boolean greaterThan(double a, double b){ return greaterThan(a, b, EPSILON); } /** * Returns true if the first double is considered
Tags (comma-separated)
Save Edits
Cancel