Skip to content

Commit 4424386

Browse files
Handles Error
1 parent 0979163 commit 4424386

File tree

1 file changed

+81
-78
lines changed

1 file changed

+81
-78
lines changed
Lines changed: 81 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,81 @@
1-
/**
2-
*
3-
*/
4-
package javacalculus.evaluator;
5-
6-
import javacalculus.core.CALC;
7-
import javacalculus.evaluator.extend.Calc1ParamFunctionEvaluator;
8-
import javacalculus.struct.CalcDouble;
9-
import javacalculus.struct.CalcFraction;
10-
import javacalculus.struct.CalcFunction;
11-
import javacalculus.struct.CalcInteger;
12-
import javacalculus.struct.CalcObject;
13-
import javacalculus.struct.CalcSymbol;
14-
15-
/**
16-
* * Trignometric Cosine function evaluator. Supports fast evaluation of special values (various multiples of PI and PI fractions).
17-
* @author Duyun Chen <A HREF="mailto:[email protected]">[[email protected]]</A>,
18-
* Seth Shannin <A HREF="mailto:[email protected]">[[email protected]]</A>
19-
*
20-
*
21-
*/
22-
public class CalcCOS extends Calc1ParamFunctionEvaluator {
23-
24-
@Override
25-
protected CalcObject evaluateObject(CalcObject input) {
26-
CalcDouble PI = null;
27-
try {
28-
PI = (CalcDouble)CALC.PI.evaluate();
29-
}
30-
catch (Exception e) {
31-
e.printStackTrace();
32-
}
33-
if (input.equals(PI)) { //COS(PI) = -1
34-
return CALC.NEG_ONE;
35-
}
36-
if (input instanceof CalcDouble) {
37-
CalcDouble param = (CalcDouble)input;
38-
param = param.divide(PI); //retrieve coefficient of pi
39-
if (param.isInteger() && param.isEven()) { //COS((2k)*PI) = 1
40-
return CALC.ONE;
41-
}
42-
else if (param.isInteger() && !param.isEven()) { //COS((2k+1)*PI) = -1
43-
return CALC.NEG_ONE;
44-
}
45-
if (param.mod(CALC.D_HALF).equals(CALC.D_ZERO)) { //COS(c*PI/2) = 0
46-
return CALC.ZERO;
47-
}
48-
}
49-
return null;
50-
}
51-
52-
@Override
53-
protected CalcObject evaluateDouble(CalcDouble input) {
54-
return new CalcDouble(Math.cos(input.doubleValue()));
55-
}
56-
57-
@Override
58-
protected CalcObject evaluateFraction(CalcFraction input) {
59-
return null;
60-
}
61-
62-
@Override
63-
protected CalcObject evaluateFunction(CalcFunction input) {
64-
return CALC.COS.createFunction(input);
65-
}
66-
67-
@Override
68-
protected CalcObject evaluateInteger(CalcInteger input) {
69-
return new CalcDouble(Math.cos(input.bigIntegerValue().intValue()));
70-
}
71-
72-
@Override
73-
protected CalcObject evaluateSymbol(CalcSymbol input) {
74-
//cannot evaluate symbols, so just return the original function
75-
return CALC.COS.createFunction(input);
76-
}
77-
78-
}
1+
/**
2+
*
3+
*/
4+
package javacalculus.evaluator;
5+
6+
import javacalculus.core.CALC;
7+
import javacalculus.evaluator.extend.Calc1ParamFunctionEvaluator;
8+
import javacalculus.struct.CalcDouble;
9+
import javacalculus.struct.CalcFraction;
10+
import javacalculus.struct.CalcFunction;
11+
import javacalculus.struct.CalcInteger;
12+
import javacalculus.struct.CalcObject;
13+
import javacalculus.struct.CalcSymbol;
14+
15+
/**
16+
* * Trignometric Cosine function evaluator. Supports fast evaluation of special values (various multiples of PI and PI fractions).
17+
* @author Duyun Chen <A HREF="mailto:[email protected]">[[email protected]]</A>,
18+
* Seth Shannin <A HREF="mailto:[email protected]">[[email protected]]</A>
19+
*
20+
*
21+
*/
22+
public class CalcCOS extends Calc1ParamFunctionEvaluator {
23+
24+
@Override
25+
protected CalcObject evaluateObject(CalcObject input) {
26+
CalcDouble PI = null;
27+
try {
28+
PI = (CalcDouble)CALC.PI.evaluate();
29+
}
30+
catch (Exception e) {
31+
e.printStackTrace();
32+
}
33+
if (input.equals(PI)) { //COS(PI) = -1
34+
return CALC.NEG_ONE;
35+
}
36+
if (input instanceof CalcDouble) {
37+
CalcDouble param = (CalcDouble)input;
38+
param = param.divide(PI); //retrieve coefficient of pi
39+
if (param.isInteger() && param.isEven()) { //COS((2k)*PI) = 1
40+
return CALC.ONE;
41+
}
42+
else if (param.isInteger() && !param.isEven()) { //COS((2k+1)*PI) = -1
43+
return CALC.NEG_ONE;
44+
}
45+
if (param.mod(CALC.D_HALF).equals(CALC.D_ZERO)) { //COS(c*PI/2) = 0
46+
return CALC.ZERO;
47+
}
48+
}
49+
return null;
50+
}
51+
52+
@Override
53+
protected CalcObject evaluateDouble(CalcDouble input) {
54+
return new CalcDouble(Math.cos(input.doubleValue()));
55+
}
56+
57+
@Override
58+
protected CalcObject evaluateFraction(CalcFraction input) {
59+
return null;
60+
}
61+
62+
@Override
63+
protected CalcObject evaluateFunction(CalcFunction input) {
64+
return CALC.COS.createFunction(input);
65+
}
66+
67+
@Override
68+
protected CalcObject evaluateInteger(CalcInteger input) {
69+
return new CalcDouble(Math.cos(input.bigIntegerValue().intValue()));
70+
}
71+
72+
@Override
73+
protected CalcObject evaluateSymbol(CalcSymbol input) {
74+
if (input.equals(CALC.ERROR)) {
75+
return CALC.ERROR;
76+
}
77+
//cannot evaluate symbols, so just return the original function
78+
return CALC.COS.createFunction(input);
79+
}
80+
81+
}

0 commit comments

Comments
 (0)