diff options
1 files changed, 13 insertions, 6 deletions
| -rw-r--r-- | src/Models/CellFormula.cpp | 19 |
diff --git a/src/Models/CellFormula.cpp b/src/Models/CellFormula.cpp index 7ff8c9f..1a340e5 100644 --- a/src/Models/CellFormula.cpp +++ b/src/Models/CellFormula.cpp @@ -2,21 +2,28 @@ #include "CellDouble.h" #include <cstring> -CellFormula::CellFormula(const char* str, const List<List<Cell*>>* tableCells) : referencedCells(), formula(), rawFormula() { +CellFormula::CellFormula(const char* str, const List<List<Cell*>>* tableCells) : localCells(), formula(), rawFormula() { this->tableCells = tableCells; parseAndSetValue(str); } +double pow(double x, unsigned y) { + double res = x; + for (unsigned i = 1; i < y; i++) + res *= res; + return res; +} + double CellFormula::calculate(unsigned index) { double lval = formula[index].left->getNumeralValue(); if (formula[index].right < 0) { switch (-formula[index++].right) { - case '+' : lval += formula[index].left->getNumeralValue(); break; - case '-' : lval -= formula[index].left->getNumeralValue(); break; - case '*' : lval *= formula[index].left->getNumeralValue(); break; - case '/' : lval /= formula[index].left->getNumeralValue(); break; - // case pow : lval += formula[index].left->getNumeralValue(); break; + case '+' : lval += formula[index].left->getNumeralValue(); break; + case '-' : lval -= formula[index].left->getNumeralValue(); break; + case '*' : lval *= formula[index].left->getNumeralValue(); break; + case '/' : lval /= formula[index].left->getNumeralValue(); break; + case '^' : lval = pow(lval, formula[index].left->getNumeralValue()); break; } } |
