Practical Examples
Scientific Calculation Example
public class ScientificCalculation {
private static final double EPSILON = 1e-6;
public static boolean compareScientificValues(
double expected, double actual) {
return Math.abs(expected - actual) < EPSILON;
}
public static void main(String[] args) {
double physicsResult = 0.1 + 0.2;
double expectedResult = 0.3;
System.out.println(
compareScientificValues(expectedResult, physicsResult)
); // true
}
}
Financial Calculation Comparison
import java.math.BigDecimal;
import java.math.RoundingMode;
public class FinancialComparison {
public static boolean compareMonetaryValues(
double value1, double value2) {
BigDecimal bd1 = BigDecimal.valueOf(value1)
.setScale(2, RoundingMode.HALF_UP);
BigDecimal bd2 = BigDecimal.valueOf(value2)
.setScale(2, RoundingMode.HALF_UP);
return bd1.compareTo(bd2) == 0;
}
public static void main(String[] args) {
double transaction1 = 100.10;
double transaction2 = 100.10000001;
System.out.println(
compareMonetaryValues(transaction1, transaction2)
); // true
}
}
Comparison Strategy Flowchart
graph TD
A[Floating-Point Comparison] --> B{Calculation Type}
B --> |Scientific| C[Epsilon Comparison]
B --> |Financial| D[BigDecimal Approach]
B --> |General| E[Relative Comparison]
Comparison Scenarios
| Scenario |
Recommended Strategy |
Precision Level |
| Scientific Computing |
Epsilon Comparison |
Medium |
| Financial Calculations |
BigDecimal |
High |
| General Numeric Comparison |
Relative Tolerance |
Moderate |
Geometric Calculation Example
public class GeometricCalculation {
private static final double TOLERANCE = 1e-4;
public static boolean compareCircleAreas(
double radius1, double radius2) {
double area1 = Math.PI * radius1 * radius1;
double area2 = Math.PI * radius2 * radius2;
return Math.abs(area1 - area2) < TOLERANCE;
}
public static void main(String[] args) {
System.out.println(
compareCircleAreas(5.0001, 5.0000)
); // true
}
}
LabEx Practical Insights
At LabEx, we emphasize selecting the right comparison strategy based on the specific computational context and required precision.
Key Practical Recommendations
- Choose comparison method based on domain
- Use appropriate precision techniques
- Always consider computational context
- Test edge cases thoroughly