double epsilon = 1e-18D; void setup() { testIsClose(100000000000000.01D, 100000000000000.011D, epsilon); testIsClose(100.01D, 100.011D, epsilon); testIsClose(10000000000000.001D / 10000.0D, 1000000000.0000001000D, epsilon); testIsClose(0.001D, 0.0010000001D, epsilon); testIsClose(0.000000000000000000000101D, 0.0D, epsilon); testIsClose(Math.sqrt(2) * Math.sqrt(2), 2.0D, epsilon); testIsClose(-Math.sqrt(2) * Math.sqrt(2), -2.0D, epsilon); testIsClose(3.14159265358979323846D, 3.14159265358979324D, epsilon); exit(); // all done } boolean isClose(double num1, double num2, double epsilon) { return Math.abs(num2 - num1) <= epsilon; } void testIsClose(double num1, double num2, double epsilon) { boolean result = isClose(num1, num2, epsilon); if (result) { println("True. ", num1, "is close to", num2); } else { println("False. ", num1, "is not close to", num2); } }