Skip to content

Instantly share code, notes, and snippets.

@alexpreynolds
Last active August 29, 2015 14:23
Show Gist options
  • Save alexpreynolds/90f0d454857718b235f8 to your computer and use it in GitHub Desktop.
Save alexpreynolds/90f0d454857718b235f8 to your computer and use it in GitHub Desktop.
Comparison of doubles in Java
package org.stamlab.test;
public class EqualTestClass {
private final static double kEpsilon = 1e-12;
public static boolean isEqual(double a, double b) {
return Math.abs(a - b) < kEpsilon;
}
public static void main(String[] args) {
double a = 1000000.0;
double b = 1000000.0;
double exponent = 32;
for (int n = 0; n < exponent; ++n) {
double b_tweaked = b + Math.pow(0.1, n);
System.out.printf("a [%3.32f] b_tweaked [%3.32f] n [%02d] isEqual(a,b) [%b]\n", a, b_tweaked, n, isEqual(a, b_tweaked));
}
System.exit(0);
}
}
@alexpreynolds
Copy link
Author

Compiled with: javac -d bin -sourcepath src src/EqualTestClass.java

Run with: java -cp bin org.stamlab.test.EqualTestClass

@alexpreynolds
Copy link
Author

Result:

a [1000000.00000000000000000000000000000000] b_tweaked [1000001.00000000000000000000000000000000] n [00] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.10000000000000000000000000000000] n [01] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.01000000000000000000000000000000] n [02] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00100000000000000000000000000000] n [03] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00010000000000000000000000000000] n [04] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00001000000000000000000000000000] n [05] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000100000000000000000000000000] n [06] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000010000000000000000000000000] n [07] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000001000000000000000000000000] n [08] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000100000000000000000000000] n [09] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000010000000000000000000000] n [10] isEqual(a,b) [false]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [11] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [12] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [13] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [14] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [15] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [16] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [17] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [18] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [19] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [20] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [21] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [22] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [23] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [24] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [25] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [26] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [27] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [28] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [29] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [30] isEqual(a,b) [true]
a [1000000.00000000000000000000000000000000] b_tweaked [1000000.00000000000000000000000000000000] n [31] isEqual(a,b) [true]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment