Skip to content

Commit 0024045

Browse files
Handles Error
1 parent 69e46ed commit 0024045

File tree

1 file changed

+77
-74
lines changed

1 file changed

+77
-74
lines changed
Lines changed: 77 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,77 @@
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-
* Natural Logarithm evaluator. Supports stable treatment of border and nondomain input.
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 CalcLN extends Calc1ParamFunctionEvaluator {
23-
24-
@Override
25-
protected CalcObject evaluateObject(CalcObject input) {
26-
CalcDouble E = null;
27-
try {
28-
E = (CalcDouble)CALC.E.evaluate();
29-
}
30-
catch (Exception e) {
31-
e.printStackTrace();
32-
}
33-
if (input.equals(E)) {
34-
return CALC.ONE;
35-
}
36-
if (input.equals(CALC.ONE)) {
37-
return CALC.ZERO;
38-
}
39-
if (input.equals(CALC.ZERO)) {
40-
return CALC.NEG_INFINITY;
41-
}
42-
return null;
43-
}
44-
45-
@Override
46-
protected CalcObject evaluateDouble(CalcDouble input) {
47-
return new CalcDouble(Math.log(input.doubleValue()));
48-
}
49-
50-
@Override
51-
protected CalcObject evaluateFraction(CalcFraction input) {
52-
//TODO decide whether ln(x/y) should evaluate to ln(x)-ln(y)
53-
return CALC.LN.createFunction(input);
54-
}
55-
56-
@Override
57-
protected CalcObject evaluateFunction(CalcFunction input) {
58-
//TODO make this more flexible?
59-
return CALC.LN.createFunction(input);
60-
}
61-
62-
@Override
63-
protected CalcObject evaluateInteger(CalcInteger input) {
64-
return new CalcDouble(Math.log(input.bigIntegerValue().intValue()));
65-
}
66-
67-
68-
@Override
69-
protected CalcObject evaluateSymbol(CalcSymbol input) {
70-
//cannot evaluate symbols, so just return the original function
71-
return CALC.LN.createFunction(input);
72-
}
73-
74-
}
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+
* Natural Logarithm evaluator. Supports stable treatment of border and nondomain input.
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 CalcLN extends Calc1ParamFunctionEvaluator {
23+
24+
@Override
25+
protected CalcObject evaluateObject(CalcObject input) {
26+
CalcDouble E = null;
27+
try {
28+
E = (CalcDouble)CALC.E.evaluate();
29+
}
30+
catch (Exception e) {
31+
e.printStackTrace();
32+
}
33+
if (input.equals(E)) {
34+
return CALC.ONE;
35+
}
36+
if (input.equals(CALC.ONE)) {
37+
return CALC.ZERO;
38+
}
39+
if (input.equals(CALC.ZERO)) {
40+
return CALC.NEG_INFINITY;
41+
}
42+
return null;
43+
}
44+
45+
@Override
46+
protected CalcObject evaluateDouble(CalcDouble input) {
47+
return new CalcDouble(Math.log(input.doubleValue()));
48+
}
49+
50+
@Override
51+
protected CalcObject evaluateFraction(CalcFraction input) {
52+
//TODO decide whether ln(x/y) should evaluate to ln(x)-ln(y)
53+
return CALC.LN.createFunction(input);
54+
}
55+
56+
@Override
57+
protected CalcObject evaluateFunction(CalcFunction input) {
58+
//TODO make this more flexible?
59+
return CALC.LN.createFunction(input);
60+
}
61+
62+
@Override
63+
protected CalcObject evaluateInteger(CalcInteger input) {
64+
return new CalcDouble(Math.log(input.bigIntegerValue().intValue()));
65+
}
66+
67+
68+
@Override
69+
protected CalcObject evaluateSymbol(CalcSymbol input) {
70+
if (input.equals(CALC.ERROR)) {
71+
return CALC.ERROR;
72+
}
73+
//cannot evaluate symbols, so just return the original function
74+
return CALC.LN.createFunction(input);
75+
}
76+
77+
}

0 commit comments

Comments
 (0)