private double exponentiateNegativeNumber(double result, boolean expNeg, double e) { if (Math.ceil(e) == e) { result = calculateIntegralExponent(result, expNeg, e); } else { result = Double.NaN; } return result; }
private double exp() { boolean neg = false; if (s.charAt(0) == '-') { neg = true; advance(); } double result = paren(); while (!s.isEmpty()) { if (s.charAt(0) == '^') { result = exponentiate(result); } else break; } if (neg) result *= -1; return result; }
private double exponentiate(double result) { advance(); boolean expNeg = false; if (s.charAt(0) == '-') { expNeg = true; advance(); } double e = paren(); if (result < 0) result = exponentiateNegativeNumber(result, expNeg, e); else if (expNeg) result = Math.exp(-e * Math.log(result)); else result = Math.exp(e * Math.log(result)); return result; }
private double trig() { double ans = 0; boolean found = false; if (s.indexOf("sin") == 0) { s = s.substring(3); ans = Math.sin(trig()); found = true; } else if (s.indexOf("cos") == 0) { s = s.substring(3); ans = Math.cos(trig()); found = true; } else if (s.indexOf("tan") == 0) { s = s.substring(3); ans = Math.tan(trig()); found = true; } if (!found) { ans = exp(); } return ans; }
private Maybe<String> evaluateAndFormat() { Maybe<Double> evaluation = (new Expression(expression)).evaluate(); if (evaluation.isNothing()) { return Maybe.nothingBecause("invalid expression: " + expression);
public Maybe<Double> evaluate() { isInvalid = false; s = x.intern(); double last = add(); return isInvalid ? Maybe.noDouble : new Maybe<>(last); }
while (!s.isEmpty() && Character.isDigit(s.charAt(0))) { temp.append(Integer.parseInt("" + s.charAt(0))); advance(); advance(); while (!s.isEmpty() && Character.isDigit(s.charAt(0))) { temp.append(Integer.parseInt("" + s.charAt(0))); advance(); advance(); temp.append(s.charAt(0)); advance(); while (!s.isEmpty() && Character.isDigit(s.charAt(0))) { temp.append(Integer.parseInt("" + s.charAt(0))); advance();
private double exponentiate(double result) { advance(); boolean expNeg = false; if (s.charAt(0) == '-') { expNeg = true; advance(); } double e = paren(); if (result < 0) result = exponentiateNegativeNumber(result, expNeg, e); else if (expNeg) result = Math.exp(-e * Math.log(result)); else result = Math.exp(e * Math.log(result)); return result; }
private double trig() { double ans = 0; boolean found = false; if (s.indexOf("sin") == 0) { s = s.substring(3); ans = Math.sin(trig()); found = true; } else if (s.indexOf("cos") == 0) { s = s.substring(3); ans = Math.cos(trig()); found = true; } else if (s.indexOf("tan") == 0) { s = s.substring(3); ans = Math.tan(trig()); found = true; } if (!found) { ans = exp(); } return ans; }
private Maybe<String> evaluateAndFormat() { Maybe<Double> evaluation = (new Expression(expression)).evaluate(); if (evaluation.isNothing()) { return Maybe.nothingBecause("invalid expression: " + expression);
public Maybe<Double> evaluate() { isInvalid = false; s = x.intern(); double last = add(); return isInvalid ? Maybe.noDouble : new Maybe<>(last); }
while (!s.isEmpty() && Character.isDigit(s.charAt(0))) { temp.append(Integer.parseInt("" + s.charAt(0))); advance(); advance(); while (!s.isEmpty() && Character.isDigit(s.charAt(0))) { temp.append(Integer.parseInt("" + s.charAt(0))); advance(); advance(); temp.append(s.charAt(0)); advance(); while (!s.isEmpty() && Character.isDigit(s.charAt(0))) { temp.append(Integer.parseInt("" + s.charAt(0))); advance();
private double exp() { boolean neg = false; if (s.charAt(0) == '-') { neg = true; advance(); } double result = paren(); while (!s.isEmpty()) { if (s.charAt(0) == '^') { result = exponentiate(result); } else break; } if (neg) result *= -1; return result; }
private double exponentiateNegativeNumber(double result, boolean expNeg, double e) { if (Math.ceil(e) == e) { result = calculateIntegralExponent(result, expNeg, e); } else { result = Double.NaN; } return result; }