@@ -34,13 +34,15 @@ class FDiv : public Operator {
3434 stack.pop ();
3535 Value* a = stack.top ();
3636 stack.pop ();
37- double res = a->asReal () - b->asReal ();
37+ double res = a->asReal () / b->asReal ();
3838 stack.push (new RealValue (res));
3939 delete a;
4040 delete b;
4141 }
4242};
4343
44+ #include < math.h>
45+
4446class Mod : public Operator {
4547public:
4648 Mod () : Operator(OP_MOD) { };
@@ -51,10 +53,10 @@ class Mod : public Operator {
5153 Value* a = stack.top ();
5254 stack.pop ();
5355 if (a->type == TYPE_REAL || b->type == TYPE_REAL) {
54- double res = a->asReal () - b->asReal ();
56+ double res = fmod ( a->asReal (), b->asReal () );
5557 stack.push (new RealValue (res));
5658 } else {
57- int res = a->asInteger () - b->asInteger ();
59+ int res = a->asInteger () % b->asInteger ();
5860 stack.push (new IntegerValue (res));
5961 }
6062 delete a;
@@ -72,10 +74,10 @@ class Mul : public Operator {
7274 Value* a = stack.top ();
7375 stack.pop ();
7476 if (a->type == TYPE_REAL || b->type == TYPE_REAL) {
75- double res = a->asReal () - b->asReal ();
77+ double res = a->asReal () * b->asReal ();
7678 stack.push (new RealValue (res));
7779 } else {
78- int res = a->asInteger () - b->asInteger ();
80+ int res = a->asInteger () * b->asInteger ();
7981 stack.push (new IntegerValue (res));
8082 }
8183 delete a;
@@ -97,10 +99,10 @@ class Add : public Operator {
9799 str.append (b->asString ());
98100 stack.push (new StringValue (str));
99101 } else if (a->type == TYPE_REAL || b->type == TYPE_REAL) {
100- double res = a->asReal () - b->asReal ();
102+ double res = a->asReal () + b->asReal ();
101103 stack.push (new RealValue (res));
102104 } else {
103- int res = a->asInteger () - b->asInteger ();
105+ int res = a->asInteger () + b->asInteger ();
104106 stack.push (new IntegerValue (res));
105107 }
106108 delete a;
0 commit comments