home *** CD-ROM | disk | FTP | other *** search
/ All for Cell Phones: Sony Ericsson / Sony-Ericsson 2004.iso / Java / Calc / MicroCalc.jar / Calculator.class (.txt) < prev    next >
Encoding:
Java Class File  |  2001-09-07  |  5.6 KB  |  334 lines

  1. import java.util.Stack;
  2.  
  3. public class Calculator {
  4.    public int drg;
  5.    public long lastValue = MathFP.toFP("0");
  6.    private Stack values = new Stack();
  7.    private Stack operators = new Stack();
  8.    public int lastOp = -1;
  9.    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};
  10.  
  11.    public Calculator() {
  12.       this.initCalculator();
  13.    }
  14.  
  15.    public void calculate(int var1) {
  16.       if ((this.lastOp == 0 || this.lastOp >= 6) && CalcManager.isNewValue) {
  17.          this.initCalculator();
  18.       }
  19.  
  20.       this.lastOp = var1;
  21.       long var3 = CalcManager.currValL;
  22.       if (!CalcManager.isNewValue) {
  23.          if (var1 == 0) {
  24.             this.lastValue = this.execute();
  25.          } else if (this.funcPriority[var1] == 5) {
  26.             this.operators.push(new Oper(var1));
  27.             this.lastValue = this.executeStep();
  28.          } else if (this.funcPriority[var1] == 4) {
  29.             if (!this.values.empty() && this.operators.empty()) {
  30.                if (this.operators.empty()) {
  31.                   this.operators.push(new Oper(var1));
  32.                   this.lastValue = this.executeStep();
  33.                }
  34.             } else {
  35.                this.operators.push(new Oper(var1));
  36.                this.lastValue = this.executeStep();
  37.             }
  38.          } else if (this.operators.empty()) {
  39.             this.operators.push(new Oper(var1));
  40.          } else {
  41.             Oper var6 = (Oper)this.operators.peek();
  42.             if (this.funcPriority[var6.opVal] < this.funcPriority[var1]) {
  43.                this.operators.push(new Oper(var1));
  44.             } else {
  45.                this.lastValue = this.executeParts(var1);
  46.                this.operators.push(new Oper(var1));
  47.             }
  48.          }
  49.       } else {
  50.          var3 = CalcManager.currValL;
  51.          this.lastValue = CalcManager.currValL;
  52.          if (var1 == 0) {
  53.             this.values.push(new Value(var3));
  54.             this.lastValue = this.execute();
  55.          } else if (this.funcPriority[var1] == 5) {
  56.             this.operators.push(new Oper(var1));
  57.             this.lastValue = this.executeStep();
  58.          } else if (this.funcPriority[var1] == 4) {
  59.             if (!this.values.empty() && this.operators.empty()) {
  60.                if (this.operators.empty()) {
  61.                   this.operators.push(new Oper(var1));
  62.                   this.lastValue = this.executeStep();
  63.                }
  64.             } else {
  65.                this.values.push(new Value(var3));
  66.                this.operators.push(new Oper(var1));
  67.                this.lastValue = this.executeStep();
  68.             }
  69.          } else if (this.values.empty()) {
  70.             this.values.push(new Value(var3));
  71.             this.operators.push(new Oper(var1));
  72.          } else if (this.operators.empty()) {
  73.             this.operators.push(new Oper(var1));
  74.          } else {
  75.             this.values.push(new Value(var3));
  76.             Oper var7 = (Oper)this.operators.peek();
  77.             if (this.funcPriority[var7.opVal] < this.funcPriority[var1]) {
  78.                this.operators.push(new Oper(var1));
  79.             } else {
  80.                this.lastValue = this.executeParts(var1);
  81.                this.operators.push(new Oper(var1));
  82.             }
  83.          }
  84.       }
  85.  
  86.       CalcManager.decimal = CalcManager.hasDecimal;
  87.       CalcManager.clearCurrValue();
  88.       CalcManager.currValL = this.lastValue;
  89.       CalcManager.setCurrValue(MathFP.toString(CalcManager.currValL, 5));
  90.       CalcManager.removeZeros();
  91.    }
  92.  
  93.    public long execute() {
  94.       long var1;
  95.       for(var1 = MathFP.toFP("0"); !this.operators.empty(); var1 = this.executeStep()) {
  96.       }
  97.  
  98.       return var1;
  99.    }
  100.  
  101.    public long executeParts(int var1) {
  102.       long var2;
  103.       for(var2 = MathFP.toFP("0"); !this.operators.empty(); var2 = this.executeStep()) {
  104.          Oper var4 = (Oper)this.operators.peek();
  105.          if (this.funcPriority[var4.opVal] < this.funcPriority[var1]) {
  106.             break;
  107.          }
  108.       }
  109.  
  110.       return var2;
  111.    }
  112.  
  113.    public long executeStep() {
  114.       long var2 = MathFP.toFP("0");
  115.       long var4 = MathFP.toFP("0.017453292519943295769236907684886");
  116.       long var6 = MathFP.toFP("0.015707963267948966192313216916398");
  117.       long var8 = MathFP.toFP("57.295779513082320876798154814105");
  118.       long var10 = MathFP.toFP("63.661977236758134307553505349006");
  119.       Value var12 = new Value();
  120.       Value var13 = new Value();
  121.       Oper var14 = (Oper)this.operators.pop();
  122.  
  123.       try {
  124.          if (var14.opVal < 6) {
  125.             try {
  126.                var13 = (Value)this.values.pop();
  127.             } catch (Exception var17) {
  128.                Value var15 = new Value(MathFP.toFP("0"));
  129.                var13 = var15;
  130.             }
  131.  
  132.             try {
  133.                var12 = (Value)this.values.pop();
  134.             } catch (Exception var18) {
  135.                Value var20 = new Value(MathFP.toFP("0"));
  136.                if (var14.opVal == 5) {
  137.                   var20.val = MathFP.toFP("1");
  138.                   var12 = var13;
  139.                   var13 = var20;
  140.                } else if (var14.opVal == 4) {
  141.                   var20.val = MathFP.toFP("1");
  142.                   var12 = var13;
  143.                   var13 = var20;
  144.                } else if (var14.opVal == 3) {
  145.                   var20.val = MathFP.toFP("1");
  146.                   var12 = var20;
  147.                } else if (var14.opVal == 2) {
  148.                   var20.val = MathFP.toFP("0");
  149.                   var12 = var13;
  150.                   var13 = var20;
  151.                } else if (var14.opVal == 1) {
  152.                   var20.val = MathFP.toFP("0");
  153.                   var12 = var20;
  154.                }
  155.             }
  156.          } else if (var14.opVal < 18) {
  157.             var12 = (Value)this.values.pop();
  158.          }
  159.  
  160.          switch (var14.opVal) {
  161.             case 1:
  162.                var2 = MathFP.add(var12.val, var13.val);
  163.                break;
  164.             case 2:
  165.                var2 = MathFP.sub(var12.val, var13.val);
  166.                break;
  167.             case 3:
  168.                var2 = MathFP.mul(var12.val, var13.val);
  169.                break;
  170.             case 4:
  171.                var2 = MathFP.div(var12.val, var13.val);
  172.                break;
  173.             case 5:
  174.                var2 = MathFP.pow(var12.val, var13.val);
  175.                break;
  176.             case 6:
  177.                var2 = MathFP.pow(var12.val, MathFP.toFP("2"));
  178.                break;
  179.             case 7:
  180.                var2 = MathFP.div(MathFP.toFP("1"), var12.val);
  181.                break;
  182.             case 8:
  183.                var2 = MathFP.sqrt(var12.val);
  184.                break;
  185.             case 9:
  186.                var2 = MathFP.log(var12.val);
  187.                break;
  188.             case 10:
  189.                var2 = MathFP.div(MathFP.log(var12.val), MathFP.log(MathFP.toFP("10")));
  190.                break;
  191.             case 11:
  192.                if (this.drg == 0) {
  193.                   var12.val = MathFP.mul(var4, var12.val);
  194.                }
  195.  
  196.                if (this.drg == 2) {
  197.                   var12.val = MathFP.mul(var6, var12.val);
  198.                }
  199.  
  200.                var2 = MathFP.sin(var12.val);
  201.                if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
  202.                   var2 = MathFP.toFP("0");
  203.                }
  204.                break;
  205.             case 12:
  206.                if (this.drg == 0) {
  207.                   var12.val = MathFP.mul(var4, var12.val);
  208.                }
  209.  
  210.                if (this.drg == 2) {
  211.                   var12.val = MathFP.mul(var6, var12.val);
  212.                }
  213.  
  214.                var2 = MathFP.cos(var12.val);
  215.                if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
  216.                   var2 = 0L;
  217.                }
  218.                break;
  219.             case 13:
  220.                if (this.drg == 0 && var12.val == MathFP.toFP("45")) {
  221.                   var2 = MathFP.toFP("1");
  222.                } else {
  223.                   if (this.drg == 0) {
  224.                      var12.val = MathFP.mul(var4, var12.val);
  225.                   }
  226.  
  227.                   if (this.drg == 2) {
  228.                      var12.val = MathFP.mul(var6, var12.val);
  229.                   }
  230.  
  231.                   long var22 = MathFP.cos(var12.val);
  232.                   if (MathFP.abs(var22) < MathFP.toFP("0.0001")) {
  233.                      var22 = MathFP.toFP("0");
  234.                   }
  235.  
  236.                   var2 = MathFP.div(MathFP.sin(var12.val), var22);
  237.                   if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
  238.                      var2 = MathFP.toFP("0");
  239.                   }
  240.                }
  241.                break;
  242.             case 14:
  243.                var2 = MathFP.asin(var12.val);
  244.                if (this.drg == 0) {
  245.                   var2 = MathFP.mul(var8, var2);
  246.                }
  247.  
  248.                if (this.drg == 2) {
  249.                   var2 = MathFP.mul(var10, var2);
  250.                }
  251.  
  252.                if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
  253.                   var2 = MathFP.toFP("0");
  254.                }
  255.                break;
  256.             case 15:
  257.                var2 = MathFP.acos(var12.val);
  258.                if (this.drg == 0) {
  259.                   var2 = MathFP.mul(var8, var2);
  260.                }
  261.  
  262.                if (this.drg == 2) {
  263.                   var2 = MathFP.mul(var10, var2);
  264.                }
  265.  
  266.                if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
  267.                   var2 = MathFP.toFP("0");
  268.                }
  269.                break;
  270.             case 16:
  271.                if (this.drg == 0 && var12.val == MathFP.toFP("1")) {
  272.                   var2 = MathFP.toFP("45");
  273.                } else {
  274.                   var2 = MathFP.atan(var12.val);
  275.                   if (this.drg == 0) {
  276.                      var2 = MathFP.mul(var8, var2);
  277.                   }
  278.  
  279.                   if (this.drg == 2) {
  280.                      var2 = MathFP.mul(var10, var2);
  281.                   }
  282.  
  283.                   if (MathFP.abs(var2) < MathFP.toFP("0.0001")) {
  284.                      var2 = MathFP.toFP("0");
  285.                   }
  286.                }
  287.                break;
  288.             case 17:
  289.                if (CalcManager.hasDecimal) {
  290.                   CalcManager.error = true;
  291.                   var2 = MathFP.toFP("0");
  292.                } else {
  293.                   long var21 = MathFP.toLong(var12.val);
  294.                   if (var21 != 0L && var21 != 1L) {
  295.                      for(var2 = var12.val; var21 > 1L; var2 = MathFP.mul(var2, MathFP.toFP(var21))) {
  296.                         var21 = MathFP.sub(var21, 1L);
  297.                      }
  298.                      break;
  299.                   }
  300.  
  301.                   var2 = MathFP.toFP("1");
  302.                }
  303.                break;
  304.             case 18:
  305.                var2 = MathFP.E;
  306.                break;
  307.             case 19:
  308.                var2 = MathFP.PI;
  309.             case 20:
  310.             default:
  311.                break;
  312.             case 21:
  313.                var2 = CalcManager.memory;
  314.          }
  315.  
  316.          this.values.push(new Value(var2));
  317.       } catch (Exception var19) {
  318.          CalcManager.error = true;
  319.          ((Throwable)var19).printStackTrace();
  320.          var2 = MathFP.toFP("0");
  321.       }
  322.  
  323.       return var2;
  324.    }
  325.  
  326.    public void initCalculator() {
  327.       MathFP.setPrecision(24);
  328.       this.values.removeAllElements();
  329.       this.operators.removeAllElements();
  330.       this.lastValue = MathFP.toFP("0");
  331.       this.lastOp = -1;
  332.    }
  333. }
  334.