Ejemplo n.º 1
0
 @Override
 public AMExpression simplifyInOneStep() {
   AMExpression f1 = factor1.simplifyInOneStep();
   AMExpression f2 = factor2.simplifyInOneStep();
   if (f1 instanceof BasicNumber) {
     if (f2 instanceof BasicNumber)
       return ((BasicNumber) f1).multiply((BasicNumber) f2); // n.n' -> n*n'
     if (((BasicNumber) f1).isZero()) return new BasicNumber(0); // 0.a -> 0
     if (((BasicNumber) f1).equals(new BasicNumber(1))) return f2; // 1.a -> a
     if (((BasicNumber) f1).isNegative())
       return new AdditiveInverse(
           new Product(((BasicNumber) f1).negate(), f2)); // (-n).a -> -(n.a)
   }
   if (f2 instanceof BasicNumber) {
     if (((BasicNumber) f2).isZero()) return new BasicNumber(0); // a.0 -> 0
     if (((BasicNumber) f2).equals(new BasicNumber(1))) return f1; // a.1 -> a
     if (((BasicNumber) f2).isNegative())
       return new AdditiveInverse(
           new Product(((BasicNumber) f2).negate(), f1)); // a.(-n) -> -(n.a)
   }
   if (f1 instanceof AdditiveInverse) {
     if (f2 instanceof AdditiveInverse)
       return new Product(
           ((AdditiveInverse) f1).getExpr(), ((AdditiveInverse) f2).getExpr()); // (-a).(-b) -> a.b
     return new AdditiveInverse(
         new Product(((AdditiveInverse) f1).getExpr(), f2)); // (-a).b -> -(a.b)
   }
   if (f2 instanceof AdditiveInverse)
     return new AdditiveInverse(
         new Product(((AdditiveInverse) f2).getExpr(), f1)); // a.(-b) -> -(a.b)))
   if (f1 instanceof Fraction) {
     AMExpression numerator = ((Fraction) f1).getNumerator();
     AMExpression denominator = ((Fraction) f1).getDenominator();
     if (numerator.equals(new BasicNumber(1)) && denominator.equals(f2))
       return new BasicNumber(1); // a.(1/a) -> 1
   }
   if (f2 instanceof Fraction) {
     AMExpression numerator = ((Fraction) f2).getNumerator();
     AMExpression denominator = ((Fraction) f2).getDenominator();
     if (numerator.equals(new BasicNumber(1)) && denominator.equals(f1))
       return new BasicNumber(1); // (1/a).a -> 1
   }
   return new Product(f1, f2);
 }
Ejemplo n.º 2
0
 @Override
 public boolean equals(Object expr) {
   if (!(expr instanceof Product)) return false;
   Product prod = (Product) expr;
   return (factor1.equals(prod.getFactor1()) && factor2.equals(prod.getFactor2()));
 }