开源C / C ++数学表达式解析器库

时间:2010-11-01 17:36:02

标签: c++ math

我正在寻找一个好的开源数学库,可以做以下事情:

  • 解析数学。表达式“1 + 1 *(3/5)”
  • 集成

有人知道这样的事吗?

7 个答案:

答案 0 :(得分:7)

还有GNU libmatheval,它可以进行评估和区分。集成是一个很大的harder问题,即使对于看起来无辜的集成也是如此。

答案 1 :(得分:5)

Octave可以执行此操作,可以从within a C++ program调用。  您甚至可以使用SWIG轻松地从八度音调调用C ++代码来生成接口。

答案 2 :(得分:3)

我总是使用用C ++编写的muParser进行解析。你不会得到一个可以集成的库;没有一个严肃的重量级图书馆就太难了。存在Maxima,Octave等开源符号集成商,但它们很难与之接口,并且该功能不能轻易地与项目的其余部分分离。

答案 3 :(得分:2)

尝试使用基于Lua的ae库。另请参阅Evaluating Mathematical Expressions using Lua

答案 4 :(得分:1)

另一种方法是在您的应用中嵌入解释语言并使用该语言的数学解析器。

LUA越来越受欢迎 - 请参阅How to embed lua in c++ via SWIG

答案 5 :(得分:1)

我使用Shunting yard algorithm时有类似的编程需求。 像你一样解析infix notation很有用。

答案 6 :(得分:0)

MathPresso库是解析器,也是数学表达式的JIT编译器,我在性能很重要时使用它。

一些测试: 评估表达式“x / y +(x * x * y + 18.243 * y)/ z” - 其中变量是双精度浮点数。

  • C ++函数:每秒144.1百万次评估
  • MathPresso:每秒133.8百万次评估