Example #1
0
 @Override
 public ExpressionPart nextStepToSimplyfy() {
   if (base instanceof Number && exponent instanceof Number) {
     return new Number(Math.pow(((Number) base).getValue(), ((Number) exponent).getValue()));
   }
   ExpressionPart tmpbase = base;
   ExpressionPart tmpexponent = exponent;
   if (base.canBeSimplified()) {
     tmpbase = base.nextStepToSimplyfy();
   }
   if (exponent.canBeSimplified()) {
     tmpexponent = exponent.simplyfy();
   }
   return this;
 }
Example #2
0
  @Override
  public ExpressionPart simplyfy() {
    ExpressionPart tmpNumerator = numerator;
    ExpressionPart tmpDenominator = denominator;

    if (tmpNumerator.canBeSimplified()) {
      tmpNumerator = tmpNumerator.simplyfy();
    }
    if (tmpDenominator.canBeSimplified()) {
      tmpDenominator = tmpDenominator.simplyfy();
    }
    if (tmpNumerator instanceof Number && tmpDenominator instanceof Number) {
      Number numeratorConverted = (Number) tmpNumerator;
      Number denominatorConverted = (Number) tmpDenominator;

      if (Operation.isInteger(numeratorConverted.getValue())
          && Operation.isInteger(denominatorConverted.getValue())) {
        ExpressionPart gcd =
            new GreatestCommonDivisor(numeratorConverted, denominatorConverted).simplyfy();

        if (gcd instanceof Number && ((Number) gcd).getValue() > 1) {
          tmpNumerator = new Division(numeratorConverted, gcd).simplyfy();
          tmpDenominator = new Division(denominatorConverted, gcd).simplyfy();
        }
      } else {
        while (!(Operation.isInteger(numeratorConverted.getValue())
            && Operation.isInteger(denominatorConverted.getValue()))) {
          numeratorConverted = new Number(numeratorConverted.getValue() * 10);
          denominatorConverted = new Number(denominatorConverted.getValue() * 10);
        }
        return new Fraction(numeratorConverted, denominatorConverted).simplyfy();
      }
    }

    if (tmpNumerator instanceof Fraction && tmpDenominator instanceof Fraction) {
      Fraction tmpNumeratorConverted = (Fraction) tmpNumerator;
      Fraction tmpDenominatorConverted = (Fraction) tmpDenominator;
      return new Fraction(
          new Multiplication(tmpNumeratorConverted.numerator, tmpDenominatorConverted.denominator),
          new Multiplication(tmpNumeratorConverted.denominator, tmpDenominatorConverted.numerator));
    }

    if (tmpNumerator instanceof Fraction) {
      Fraction tmpNumeratorConverted = (Fraction) tmpNumerator;
      return new Fraction(
          tmpNumeratorConverted.numerator,
          new Multiplication(tmpNumeratorConverted.denominator, tmpDenominator));
    }

    if (tmpDenominator instanceof Fraction) {
      Fraction tmpDenominatorConverted = (Fraction) tmpDenominator;
      return new Fraction(
          new Multiplication(tmpDenominatorConverted.denominator, tmpNumerator),
          tmpDenominatorConverted.numerator);
    }

    if (tmpDenominator instanceof Number) {
      if (((Number) tmpDenominator).getValue() == 1) {
        return tmpNumerator;
      }
    }

    Fraction retValue = new Fraction(tmpNumerator, tmpDenominator);
    /*retValue.setSign(this.isPositive);
    if(tmpNumerator instanceof Number){
    	if(((Number)tmpNumerator).getValue() < 0){
    		retValue.setSign(false);
    		tmpNumerator = new Number(Math.abs(((Number)tmpNumerator).getValue()));
    		retValue.setSignChecked(true);
    	}
    }*/

    return retValue;
  }