@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; }
@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; }