【问题标题】:OpenSouce C/C++ Math expression parser Library [closed]开源 C/C++ 数学表达式解析器库 [关闭]
【发布时间】:2012-08-23 11:44:46
【问题描述】:

我正在寻找一个好的开源数学库,它可以执行以下操作:

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

有人知道这样的事吗?

【问题讨论】:

  • 表达式解析和集成有很大不同,具体取决于您需要的集成有多复杂
  • Shunting Yard Algorithm 的一些免费 Java 和 C++ 实现,用于将表达式转换为反向波兰表示法,然后评估这些可以在这里找到:technical-recipes.com/2011/…
  • 数学表达式解析示例:stackoverflow.com/a/32853177

标签: c++ math


【解决方案1】:

还有GNU libmatheval,它进行评估和区分。集成是一个很大的harder 问题,即使对于看似无辜的被积函数也是如此。

【讨论】:

  • +1,我以前没有遇到过,看起来很有趣。
【解决方案2】:

Octave 可以做到这一点,并且可以从within a C++ program 调用。 您甚至可以使用 SWIG 轻松地从 octave 调用 C++ 代码来生成接口。

【讨论】:

    【解决方案3】:

    我一直使用用 C++ 编写的 muParser 进行解析。您不会获得可以进行集成的库;没有一个严肃的重量级库简直太难了。存在诸如 Maxima、Octave 等开源符号集成器,但它们难以交互,并且该功能不能轻易地与项目的其余部分分离。

    【讨论】:

      【解决方案4】:

      试试我基于 Lua 的 ae 库。另见Evaluating Mathematical Expressions using Lua

      【讨论】:

        【解决方案5】:

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

        LUA 正为此而流行 - 请参阅 How to embed lua in c++ via SWIG

        【讨论】:

          【解决方案6】:

          我有类似的编程需求,我使用了Shunting yard algorithm。 对于解析infix notation 很有用。

          【讨论】:

            【解决方案7】:

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

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

            • C++ 函数:每秒 1.441 亿次评估
            • MathPresso:每秒 1.338 亿次评估

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-10-13
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多