function approximatelyEqual(a, b, epsilon = 1e-9) {
return Math.abs(a - b) <= epsilon;
}
/*
* Main program
*/
// Example values
const x = 0.1 + 0.2;
const y = 0.3;
// Print program title
console.log("================================================");
console.log(" Safe Floating-Point Comparison in JavaScript");
console.log("================================================");
console.log();
// Show full precision
console.log(`x = ${x.toPrecision(17)}`);
console.log(`y = ${y.toPrecision(17)}`);
console.log();
/*
* BAD PRACTICE:
* Direct comparison using ===.
* This may fail because of floating-point rounding errors.
*/
if (x === y) {
console.log("Direct comparison (===): Equal");
} else {
console.log("Direct comparison (===): Not Equal");
}
console.log();
/*
* GOOD PRACTICE:
* Compare using approximatelyEqual().
*/
if (approximatelyEqual(x, y)) {
console.log("approximatelyEqual(): Equal");
} else {
console.log("approximatelyEqual(): Not Equal");
}
console.log();
/*
* Additional examples
*/
console.log("Additional Tests:");
console.log("-----------------");
console.log(
"1000000.000000001 vs 1000000.000000002:",
approximatelyEqual(
1000000.000000001,
1000000.000000002
)
);
console.log(
"0.000000000001 vs 0:",
approximatelyEqual(
0.000000000001,
0
)
);
console.log(
"1.5 vs 2.0:",
approximatelyEqual(
1.5,
2.0
)
);
/*
run:
================================================
Safe Floating-Point Comparison in JavaScript
================================================
x = 0.30000000000000004
y = 0.29999999999999999
Direct comparison (===): Not Equal
approximatelyEqual(): Equal
Additional Tests:
-----------------
1000000.000000001 vs 1000000.000000002: true
0.000000000001 vs 0: true
1.5 vs 2.0: false
*/