我们在开发过程中会遇到可配置的数学表达式计算时,通过计算公式库(muparser),快速和简单地解析数学表达式及进行计算。
代码示例:
#include <string>//计算公式库
#include "muParser.h"
using namespace mu;
std::string expr = "800*(a/b)";//表达式std::string arg01="a";//参数名1,与表达式一致
std::string arg02="b";//参数名2,与表达式一致
int main(int argc, char **argv)
{
try{
Parser p;
//实际数据
double *_dval = new double[2];
_dval[0]=30;
_dval[1]=40;
//将参数与值(实际数据)映射
p.DefineVar(arg01, &_dval[0]);
p.DefineVar(arg02, &_dval[1]);
//设置数学表达式
p.SetExpr(expr);
//计算
double r_val = static_cast<double>(p.Eval());
printf("expr[%s],r_val=%f\n",expr.c_str(),r_val);
}catch (Parser::exception_type &e)
{
std::cout << e.GetMsg() << std::endl;
}
getchar();
return 0;
};
实际使用中将数学表达式及参数名从配置文件读入,或者从脚本文件读取数学表达式、参数名、实际值,达到实时按需计算
代码用到的公式库:http://download.csdn.net/download/py8105/9802277