1 package calculator.operations;
2
3 import java.util.List;
4
5 import calculator.Expression;
6 import calculator.IllegalConstruction;
7 import calculator.atoms.Complex;
8 import calculator.atoms.IntegerAtom;
9 import calculator.atoms.Rationnal;
10 import calculator.atoms.Real;
11
12
13
14
15
16
17
18
19
20
21
22 public final class Plus extends Operation {
23
24
25
26
27
28
29
30
31
32 public Plus(List<Expression> elist) throws IllegalConstruction {
33 super(elist);
34 symbol = "+";
35 neutral = 0;
36 }
37
38
39
40
41
42
43
44
45 public Real op(Real r1, Real r2) {
46 if ((r1.isPlusInf() && r2.isMinusInf())
47 || (r1.isMinusInf() && r2.isPlusInf())
48 || r1.isNan() || r2.isNan()) {
49 return Real.nan();
50 }
51 if (r1.isMinusInf() || r2.isMinusInf()) {
52 return Real.minusInf();
53 }
54 if (r1.isPlusInf() || r2.isPlusInf()) {
55 return Real.plusInf();
56 }
57
58 return new Real(r1.getValue().add(r2.getValue()));
59 }
60
61
62
63
64
65
66
67
68 public IntegerAtom op(IntegerAtom i1, IntegerAtom i2) {
69 return new IntegerAtom(i1.getValue() + i2.getValue());
70 }
71
72 @Override
73 public Complex op(Complex c1, Complex c2) {
74 if (c1.isNaN() || c2.isNaN()) {
75 return Complex.nan();
76 }
77 org.apache.commons.numbers.complex.Complex result = c1.getValue().add(c2.getValue());
78 return new Complex(result);
79 }
80
81 @Override
82 public Rationnal op(Rationnal q1, Rationnal q2) {
83 org.apache.commons.numbers.fraction.Fraction result = q1.getValue().add(q2.getValue());
84 return new Rationnal(result);
85 }
86 }