Skip to content

Commit 0979163

Browse files
Handles Error
1 parent b5f0ed8 commit 0979163

File tree

1 file changed

+83
-80
lines changed

1 file changed

+83
-80
lines changed
Lines changed: 83 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,83 @@
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 Sine 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 CalcSIN 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)) {
34-
return CALC.ZERO;
35-
}
36-
if (input instanceof CalcDouble) {
37-
CalcDouble param = (CalcDouble)input;
38-
param = param.divide(PI); //retrieve coefficient of pi
39-
if (param.isInteger()) { //SIN(c*PI) = 0
40-
return CALC.ZERO;
41-
}
42-
//System.out.println(param.mod(CALC.D_HALF));
43-
//System.out.println(param.mod(CALC.D_HALF).isInteger());
44-
if (param.mod(CALC.D_HALF).equals(CALC.D_ZERO)) { //SIN(c*PI/2)
45-
if (param.mod(CALC.D_THREE_HALF).equals(CALC.D_ZERO)) {
46-
return CALC.NEG_ONE;
47-
} //SIN(c*3*PI/2) = -1, c does not divide 3 or 2
48-
else return CALC.ONE; //SIN(c*PI/2) = 1, c does not divide 2
49-
}
50-
}
51-
return null;
52-
}
53-
54-
@Override
55-
protected CalcObject evaluateDouble(CalcDouble input) {
56-
return new CalcDouble(Math.sin(input.doubleValue()));
57-
}
58-
59-
@Override
60-
protected CalcObject evaluateFraction(CalcFraction input) {
61-
return null;
62-
}
63-
64-
@Override
65-
protected CalcObject evaluateFunction(CalcFunction input) {
66-
return CALC.SIN.createFunction(input);
67-
}
68-
69-
@Override
70-
protected CalcObject evaluateInteger(CalcInteger input) {
71-
return new CalcDouble(Math.sin(input.bigIntegerValue().intValue()));
72-
}
73-
74-
@Override
75-
protected CalcObject evaluateSymbol(CalcSymbol input) {
76-
//cannot evaluate symbols, so just return the original function
77-
return CALC.SIN.createFunction(input);
78-
}
79-
80-
}
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 Sine 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 CalcSIN 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)) {
34+
return CALC.ZERO;
35+
}
36+
if (input instanceof CalcDouble) {
37+
CalcDouble param = (CalcDouble)input;
38+
param = param.divide(PI); //retrieve coefficient of pi
39+
if (param.isInteger()) { //SIN(c*PI) = 0
40+
return CALC.ZERO;
41+
}
42+
//System.out.println(param.mod(CALC.D_HALF));
43+
//System.out.println(param.mod(CALC.D_HALF).isInteger());
44+
if (param.mod(CALC.D_HALF).equals(CALC.D_ZERO)) { //SIN(c*PI/2)
45+
if (param.mod(CALC.D_THREE_HALF).equals(CALC.D_ZERO)) {
46+
return CALC.NEG_ONE;
47+
} //SIN(c*3*PI/2) = -1, c does not divide 3 or 2
48+
else return CALC.ONE; //SIN(c*PI/2) = 1, c does not divide 2
49+
}
50+
}
51+
return null;
52+
}
53+
54+
@Override
55+
protected CalcObject evaluateDouble(CalcDouble input) {
56+
return new CalcDouble(Math.sin(input.doubleValue()));
57+
}
58+
59+
@Override
60+
protected CalcObject evaluateFraction(CalcFraction input) {
61+
return null;
62+
}
63+
64+
@Override
65+
protected CalcObject evaluateFunction(CalcFunction input) {
66+
return CALC.SIN.createFunction(input);
67+
}
68+
69+
@Override
70+
protected CalcObject evaluateInteger(CalcInteger input) {
71+
return new CalcDouble(Math.sin(input.bigIntegerValue().intValue()));
72+
}
73+
74+
@Override
75+
protected CalcObject evaluateSymbol(CalcSymbol input) {
76+
if (input.equals(CALC.ERROR)) {
77+
return CALC.ERROR;
78+
}
79+
//cannot evaluate symbols, so just return the original function
80+
return CALC.SIN.createFunction(input);
81+
}
82+
83+
}

0 commit comments

Comments
 (0)