public class BoundedArithmetic<T extends Number> {
    public double add(T a, T b) {
        return a.doubleValue() + b.doubleValue();
    }
    
    public double subtract(T a, T b) {
        return a.doubleValue() - b.doubleValue();
    }
    
    public double multiply(T a, T b) {
        return a.doubleValue() * b.doubleValue();
    }
    
    public double divide(T a, T b) {
        if (b.doubleValue() == 0) {
            throw new ArithmeticException("Division by zero is not allowed.");
        }
        return a.doubleValue() / b.doubleValue();
    }
    
    public static void main(String[] args) {
        BoundedArithmetic<Number> calculator = new BoundedArithmetic<>();
        Integer a = 10;
        Integer b = 5;
        System.out.println("Addition: " + calculator.add(a, b));
        System.out.println("Subtraction: " + calculator.subtract(a, b));
        System.out.println("Multiplication: " + calculator.multiply(a, b));
        System.out.println("Division: " + calculator.divide(a, b));
        
        Double x = 15.5;
        Double y = 4.5;
        System.out.println("Addition (Double): " + calculator.add(x, y));
        System.out.println("Subtraction (Double): " + calculator.subtract(x, y));
        System.out.println("Multiplication (Double): " + calculator.multiply(x, y));
        System.out.println("Division (Double): " + calculator.divide(x, y));
    }
}