junit - Performant way to check java.lang.Double for equality -
what performant way check double values equality.
i understand that
double = 0.00023d; double b = 0.00029d; boolean eq = (a == b);
is slow.
so i'm using
double epsilon = 0.00000001d; eq = math.abs(a - b) < epsilon;
the problem infinitest
complaning tests taking time. it's not big deal (1 sec top), made me curious.
additional info
a
hard coded since it's expected value, b
computed by
// fyi: current = int, max = int public double getstatus() { double value = 0.0; if (current != 0 && max != 0) value = ((double) current) / max; return value; }
update
java.lang.double way
public boolean equals(object obj) { return (obj instanceof double) && (doubletolongbits(((double)obj).value) == doubletolongbits(value)); }
so 1 assume best practice.
junit has method of checking double
'equality' given delta:
assert.assertequals(0.00023d, 0.00029d, 0.0001d);
as noted in comments, junit slower comparing manually given delta. junit first double.compare(expected, actual)
followed (if not equal) math.abs(expected - actual) <= delta
.
hopefully answer still useful people not aware junit provides way inexact double
equality testing.
Comments
Post a Comment