让程序支持自定义的数学计算器是常用功能,找了几个用来数学表达式解析求值的库,有几个看起来很不错。
各个数学表达式求值的综合对比
对比结果如下,ExprTK得分最高, TinyExpr得分最低,
GitHub - ArashPartow/math-parser-benchmark-project: C++ Mathematical Expression Parser Benchmark
1、TinyExpr
TinyExpr is a very small recursive descent parser and evaluation engine for math expressions. It's handy when you want to add the ability to evaluate math expressions at runtime without adding a bunch of cruft to your project.
In addition to the standard math operators and precedence, TinyExpr also supports the standard C math functions and runtime binding of variables.
https://github.com/codeplea/tinyexpr
2、Exprtk
C++数学表达式工具包库(ExprTk)是一个通用、易于使用、易于集成、运行时效率极高的数学表达式解析器和评估引擎。ExprTk支持多种形式的函数、逻辑和向量处理语义,并且非常容易扩展。
http://www.partow.net/programming/exprtk/
3、Muparser
许多应用程序需要解析数学表达式。muparser的主要目标是提供一种快速、简单和安全的方法来完成这一任务。muparser是一个用C++编写的可扩展的高性能数学表达式解析器库。它的工作原理是将数学表达式转换为字节码,并预先计算表达式的常量部分。为了获得最佳性能,muparser允许使用OpenMP并行计算表达式。使用OpenMP并行计算表达式。
该库在设计时考虑了可移植性,应该在每个标准兼容的C++编译器上编译。构建系统基于CMake。该代码在32位和64位架构上运行,并已使用Visual Studio 2019,CLANG和GCC进行了测试。提供代码示例是为了帮助您了解其用法。该库是开源的,并根据BSD -第2条“简化”许可证分发。最新稳定版本的源代码存档可在此处下载:
muparser库处于“生产”状态。代码更改保持在最低限度,几乎没有主动开发。主要的重点放在bug修复和保持归档与当前一代的C++编译器兼容。
https://beltoforion.de/en/muparser/