home *** CD-ROM | disk | FTP | other *** search
- import java.util.Stack;
-
- public class Calculator {
- public int drg;
- public long lastValue = MathFP.toFP("0");
- private Stack values = new Stack();
- private Stack operators = new Stack();
- public int lastOp = -1;
- public int[] funcPriority = new int[]{0, 1, 1, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6};
-
- public Calculator() {
- this.initCalculator();
- }
-
- public void calculate(int var1) {
- if ((this.lastOp == 0 || this.lastOp >= 6) && CalcManager.isNewValue) {
- this.initCalculator();
- }
-
- this.lastOp = var1;
- long var3 = CalcManager.currValL;
- if (!CalcManager.isNewValue) {
- if (var1 == 0) {
- this.lastValue = this.execute();
- } else if (this.funcPriority[var1] == 5) {
- this.operators.push(new Oper(var1));
- this.lastValue = this.executeStep();
- } else if (this.funcPriority[var1] == 4) {
- if (!this.values.empty() && this.operators.empty()) {
- if (this.operators.empty()) {
- this.operators.push(new Oper(var1));
- this.lastValue = this.executeStep();
- }
- } else {
- this.operators.push(new Oper(var1));
- this.lastValue = this.executeStep();
- }
- } else if (this.operators.empty()) {
- this.operators.push(new Oper(var1));
- } else {
- Oper var6 = (Oper)this.operators.peek();
- if (this.funcPriority[var6.opVal] < this.funcPriority[var1]) {
- this.operators.push(new Oper(var1));
- } else {
- this.lastValue = this.executeParts(var1);
- this.operators.push(new Oper(var1));
- }
- }
- } else {
- var3 = CalcManager.currValL;
- this.lastValue = CalcManager.currValL;
- if (var1 == 0) {
- this.values.push(new Value(var3));
- this.lastValue = this.execute();
- } else if (this.funcPriority[var1] == 5) {
- this.operators.push(new Oper(var1));
- this.lastValue = this.executeStep();
- } else if (this.funcPriority[var1] == 4) {
- if (!this.values.empty() && this.operators.empty()) {
- if (this.operators.empty()) {
- this.operators.push(new Oper(var1));
- this.lastValue = this.executeStep();
- }
- } else {
- this.values.push(new Value(var3));
- this.operators.push(new Oper(var1));
- this.lastValue = this.executeStep();
- }
- } else if (this.values.empty()) {
- this.values.push(new Value(var3));
- this.operators.push(new Oper(var1));
- } else if (this.operators.empty()) {
- this.operators.push(new Oper(var1));
- } else {
- this.values.push(new Value(var3));
- Oper var7 = (Oper)this.operators.peek();
- if (this.funcPriority[var7.opVal] < this.funcPriority[var1]) {
- this.operators.push(new Oper(var1));
- } else {
- this.lastValue = this.executeParts(var1);
- this.operators.push(new Oper(var1));
- }
- }
- }
-
- CalcManager.decimal = CalcManager.hasDecimal;
- CalcManager.clearCurrValue();
- CalcManager.currValL = this.lastValue;
- CalcManager.setCurrValue(MathFP.toString(CalcManager.currValL, 5));
- CalcManager.removeZeros();
- }
-
- public long execute() {
- long var1;
- for(var1 = MathFP.toFP("0"); !this.operators.empty(); var1 = this.executeStep()) {
- }
-
- return var1;
- }
-
- public long executeParts(int var1) {
- long var2;
- for(var2 = MathFP.toFP("0"); !this.operators.empty(); var2 = this.executeStep()) {
- Oper var4 = (Oper)this.operators.peek();
- if (this.funcPriority[var4.opVal] < this.funcPriority[var1]) {
- break;
- }
- }
-
- return var2;
- }
-
- public long executeStep() {
- long var2 = MathFP.toFP("0");
- long var4 = MathFP.toFP("0.017453292519943295769236907684886");
- long var6 = MathFP.toFP("0.015707963267948966192313216916398");
- long var8 = MathFP.toFP("57.295779513082320876798154814105");
- long var10 = MathFP.toFP("63.661977236758134307553505349006");
- Value var12 = new Value();
- Value var13 = new Value();
- Oper var14 = (Oper)this.operators.pop();
-
- try {
- if (var14.opVal < 6) {
- try {
- var13 = (Value)this.values.pop();
- } catch (Exception var17) {
- Value var15 = new Value(MathFP.toFP("0"));
- var13 = var15;
- }
-
- try {
- var12 = (Value)this.values.pop();
- } catch (Exception var18) {
- Value var20 = new Value(MathFP.toFP("0"));
- if (var14.opVal == 5) {
- var20.val = MathFP.toFP("1");
- var12 = var13;
- var13 = var20;
- } else if (var14.opVal == 4) {
- var20.val = MathFP.toFP("1");
- var12 = var13;
- var13 = var20;
- } else if (var14.opVal == 3) {
- var20.val = MathFP.toFP("1");
- var12 = var20;
- } else if (var14.opVal == 2) {
- var20.val = MathFP.toFP("0");
- var12 = var13;
- var13 = var20;
- } else if (var14.opVal == 1) {
- var20.val = MathFP.toFP("0");
- var12 = var20;
- }
- }
- } else if (var14.opVal < 18) {
- var12 = (Value)this.values.pop();
- }
-
- switch (var14.opVal) {
- case 1:
- var2 = MathFP.add(var12.val, var13.val);
- break;
- case 2:
- var2 = MathFP.sub(var12.val, var13.val);
- break;
- case 3:
- var2 = MathFP.mul(var12.val, var13.val);
- break;
- case 4:
- var2 = MathFP.div(var12.val, var13.val);
- break;
- case 5:
- var2 = MathFP.pow(var12.val, var13.val);
- break;
- case 6:
- var2 = MathFP.pow(var12.val, MathFP.toFP("2"));
- break;
- case 7:
- var2 = MathFP.div(MathFP.toFP("1"), var12.val);
- break;
- case 8:
- var2 = MathFP.sqrt(var12.val);
- break;
- case 9:
- var2 = MathFP.log(var12.val);
- break;
- case 10:
- var2 = MathFP.div(MathFP.log(var12.val), MathFP.log(MathFP.toFP("10")));
- break;
- case 11:
- if (this.drg == 0) {
- var12.val = MathFP.mul(var4, var12.val);
- }
-
- if (this.drg == 2) {
- var12.val = MathFP.mul(var6, var12.val);
- }
-
- var2 = MathFP.sin(var12.val);
- if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
- var2 = MathFP.toFP("0");
- }
- break;
- case 12:
- if (this.drg == 0) {
- var12.val = MathFP.mul(var4, var12.val);
- }
-
- if (this.drg == 2) {
- var12.val = MathFP.mul(var6, var12.val);
- }
-
- var2 = MathFP.cos(var12.val);
- if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
- var2 = 0L;
- }
- break;
- case 13:
- if (this.drg == 0 && var12.val == MathFP.toFP("45")) {
- var2 = MathFP.toFP("1");
- } else {
- if (this.drg == 0) {
- var12.val = MathFP.mul(var4, var12.val);
- }
-
- if (this.drg == 2) {
- var12.val = MathFP.mul(var6, var12.val);
- }
-
- long var22 = MathFP.cos(var12.val);
- if (MathFP.abs(var22) < MathFP.toFP("0.0001")) {
- var22 = MathFP.toFP("0");
- }
-
- var2 = MathFP.div(MathFP.sin(var12.val), var22);
- if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
- var2 = MathFP.toFP("0");
- }
- }
- break;
- case 14:
- var2 = MathFP.asin(var12.val);
- if (this.drg == 0) {
- var2 = MathFP.mul(var8, var2);
- }
-
- if (this.drg == 2) {
- var2 = MathFP.mul(var10, var2);
- }
-
- if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
- var2 = MathFP.toFP("0");
- }
- break;
- case 15:
- var2 = MathFP.acos(var12.val);
- if (this.drg == 0) {
- var2 = MathFP.mul(var8, var2);
- }
-
- if (this.drg == 2) {
- var2 = MathFP.mul(var10, var2);
- }
-
- if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
- var2 = MathFP.toFP("0");
- }
- break;
- case 16:
- if (this.drg == 0 && var12.val == MathFP.toFP("1")) {
- var2 = MathFP.toFP("45");
- } else {
- var2 = MathFP.atan(var12.val);
- if (this.drg == 0) {
- var2 = MathFP.mul(var8, var2);
- }
-
- if (this.drg == 2) {
- var2 = MathFP.mul(var10, var2);
- }
-
- if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
- var2 = MathFP.toFP("0");
- }
- }
- break;
- case 17:
- if (CalcManager.hasDecimal) {
- CalcManager.error = true;
- var2 = MathFP.toFP("0");
- } else {
- long var21 = MathFP.toLong(var12.val);
- if (var21 != 0L && var21 != 1L) {
- for(var2 = var12.val; var21 > 1L; var2 = MathFP.mul(var2, MathFP.toFP(var21))) {
- var21 = MathFP.sub(var21, 1L);
- }
- break;
- }
-
- var2 = MathFP.toFP("1");
- }
- break;
- case 18:
- var2 = MathFP.E;
- break;
- case 19:
- var2 = MathFP.PI;
- case 20:
- default:
- break;
- case 21:
- var2 = CalcManager.memory;
- }
-
- this.values.push(new Value(var2));
- } catch (Exception var19) {
- CalcManager.error = true;
- ((Throwable)var19).printStackTrace();
- var2 = MathFP.toFP("0");
- }
-
- return var2;
- }
-
- public void initCalculator() {
- MathFP.setPrecision(24);
- this.values.removeAllElements();
- this.operators.removeAllElements();
- this.lastValue = MathFP.toFP("0");
- this.lastOp = -1;
- }
- }
-