Update README.md
This commit is contained in:
@@ -24,15 +24,25 @@ double PostfixEval::run(const std::vector<Token>& postfix, const unordered_map<s
|
||||
}
|
||||
else stk.push(it->second);
|
||||
}
|
||||
else if (token.is_ope()) {
|
||||
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>ж<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
||||
if (stk.size() < 2) throw runtime_error("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
double b = stk.top();
|
||||
stk.pop();
|
||||
double a = stk.top();
|
||||
stk.pop();
|
||||
double res = apply_BO(token.value, a, b);
|
||||
stk.push(res);
|
||||
else if (token.is_ope()) {
|
||||
if (token.value == "!") {
|
||||
if (stk.empty())
|
||||
throw runtime_error("<EFBFBD>׳˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
double x = stk.top(); stk.pop();
|
||||
stk.push(apply_Fac(x));
|
||||
}
|
||||
else {
|
||||
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>ж<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
||||
if (stk.size() < 2)
|
||||
throw runtime_error("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
double b = stk.top();
|
||||
stk.pop();
|
||||
double a = stk.top();
|
||||
stk.pop();
|
||||
double res = apply_BO(token.value, a, b);
|
||||
stk.push(res);
|
||||
}
|
||||
|
||||
}
|
||||
else if (token.is_fun()) {
|
||||
//ȡ<><C8A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>һԪ<D2BB><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ<EFBFBD><C8BA><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
@@ -63,9 +73,16 @@ double PostfixEval::apply_BO(const string& op, double a, double b) {
|
||||
}
|
||||
if (op == "^") return pow(a, b);
|
||||
if (op == "%") {
|
||||
if (b == 0) throw runtime_error("ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>");
|
||||
if (b == 0)
|
||||
throw runtime_error("ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>");
|
||||
return std::fmod(a, b);
|
||||
}
|
||||
if (op == "//") {
|
||||
if (b == 0)
|
||||
throw runtime_error("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>");
|
||||
return std::floor(a / b); // <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
throw runtime_error("δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" + op);
|
||||
}
|
||||
|
||||
@@ -87,11 +104,41 @@ double PostfixEval::apply_UF(const string& func, double x) {
|
||||
throw runtime_error("log<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0");
|
||||
return log(x);
|
||||
}
|
||||
if (f == "ln") {
|
||||
if(x<=0)
|
||||
throw runtime_error("ln<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0");
|
||||
return log(x) / log(exp(1));
|
||||
}
|
||||
if (f == "exp") return exp(x);
|
||||
if (f == "abs") return fabs(x);
|
||||
if (f == "asin") return asin(x);
|
||||
if (f == "acos") return acos(x);
|
||||
if (f == "asin") {
|
||||
if (x < -1 || x > 1)
|
||||
throw runtime_error("asin <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [-1, 1] <20><>Χ<EFBFBD><CEA7>");
|
||||
return std::asin(x);
|
||||
}
|
||||
if (f == "acos") {
|
||||
if (x < -1 || x > 1)
|
||||
throw runtime_error("asin <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [-1, 1] <20><>Χ<EFBFBD><CEA7>");
|
||||
return std::acos(x);
|
||||
}
|
||||
if (f == "atan") return atan(x);
|
||||
|
||||
if (f == "floor") return std::floor(x); // <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
if (f == "ceil") return std::ceil(x); // <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
||||
if (f == "round") return std::round(x); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
throw runtime_error("δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" + func);
|
||||
}
|
||||
|
||||
double PostfixEval::apply_Fac(double x) {
|
||||
if (x < 0)
|
||||
throw runtime_error("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD>");
|
||||
if (x != floor(x))
|
||||
throw runtime_error("<EFBFBD>׳˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
|
||||
int n = static_cast<int>(x);
|
||||
double result = 1;
|
||||
for (int i = 2; i <= n; ++i)
|
||||
result *= i;
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user