From 5789ae9ad046e6e3a9fb632eff740b4d92785c3a Mon Sep 17 00:00:00 2001 From: MobSlicer152 Date: Mon, 22 Jan 2024 12:34:19 -0500 Subject: [PATCH] Add more functions, fix exponents --- pom.xml | 2 +- .../randomcode/calculator/MathFunction.java | 23 ++++++++++++++++++- .../dev/randomcode/calculator/Parser.java | 15 +++++++++++- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 774713b..df1779c 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ dev.randomcode.calculator calculator - 1.0.2-SNAPSHOT + 1.1.0-SNAPSHOT calculator http://github.com/MobSlicer152/calculator diff --git a/src/main/java/dev/randomcode/calculator/MathFunction.java b/src/main/java/dev/randomcode/calculator/MathFunction.java index 06b5cbb..f0aee90 100644 --- a/src/main/java/dev/randomcode/calculator/MathFunction.java +++ b/src/main/java/dev/randomcode/calculator/MathFunction.java @@ -76,6 +76,26 @@ public enum MathFunction { assert (arguments.length == 1); return Math.atan(arguments[0]); }), + LOGNATURAL("Logarithm, base e (ln)", "ln", 1, false, false, false, + (Scanner scanner) -> { + return new Double[] { + Util.getValidDouble(scanner, "Enter the number: ") + }; + }, + (Double[] arguments) -> { + assert (arguments.length == 1); + return Math.log(arguments[0]); + }), + LOG10("Logarithm, base 10 (log10)", "log10", 1, false, false, false, + (Scanner scanner) -> { + return new Double[] { + Util.getValidDouble(scanner, "Enter the number: ") + }; + }, + (Double[] arguments) -> { + assert (arguments.length == 1); + return Math.log10(arguments[0]); + }), // These two are here for ease of both inputting and parsing them SQUARE_ROOT("Square root (sqrt)", "sqrt", 1, false, false, false, (Scanner scanner) -> { @@ -112,7 +132,8 @@ public enum MathFunction { private Function getInputsFunction; private Function executeFunction; - private MathFunction(String text, String token, int argumentCount, boolean isTrig, boolean takesAngle, boolean givesAngle, + private MathFunction(String text, String token, int argumentCount, boolean isTrig, boolean takesAngle, + boolean givesAngle, Function getInputsFunction, Function executeFunction) { this.text = text; this.token = token; diff --git a/src/main/java/dev/randomcode/calculator/Parser.java b/src/main/java/dev/randomcode/calculator/Parser.java index 30cb36a..0e3f923 100644 --- a/src/main/java/dev/randomcode/calculator/Parser.java +++ b/src/main/java/dev/randomcode/calculator/Parser.java @@ -26,9 +26,22 @@ private Expression expression() { // + and - private Expression term() { - Expression expression = factor(); + Expression expression = exponent(); while (match(Token.ADD, Token.SUBTRACT)) { + Token operator = previous(); + Expression right = exponent(); + expression = new Expression.Binary(expression, operator, right); + } + + return expression; + } + + // ^ + private Expression exponent() { + Expression expression = factor(); + + while (match(Token.EXPONENT)) { Token operator = previous(); Expression right = factor(); expression = new Expression.Binary(expression, operator, right);