java using float comparison will return wrong results -
class { public final static float _eps = 1e-7f; public final static double _eps2 = 1e-7; public static boolean compare(float a, float b) { return < b + _eps; } public static boolean compare2(float a, float b) { return < b + _eps2; } public static void main(string [] main) { float = 54.124844f; float b = 54.124844f; system.out.println("compare 1: " + a.compare(a, b) + " comapre 2: " + a.compare2(a, b)); } } i thought both of these 2 comparisons return true, but, a.compare return false. reason in mind because of range , precision difference between float , double type. however, seems number , eps used should within legal range. help.
this because 54.124844f + 1e-7f == 54.124844f. float doesn't have enough precision addition yield value different 54.124844f.
using math.nextafter(float, double) shows next larger value after 54.124844f 54.124847f. such, adding smaller increment won't change float.
the other 1 returns true because _eps2 double, b coerced double before addition. double have enough precision represent difference.
Comments
Post a Comment