c++ - evaluar - evaluador de expresiones en c
Biblioteca de analizador de expresiones matemáticas OpenSouce C/C++ (7)
Estoy buscando una buena Biblioteca de Matemáticas de código abierto que pueda hacer cosas como:
- Analizar matemáticas. expresiones "1 + 1 * (3/5)"
- Integración
¿Alguien sabe algo como esto?
Hay MathPresso biblioteca MathPresso que es analizador y también compilador JIT de expresiones matemáticas, lo uso cuando el rendimiento es importante.
Algunas pruebas: evaluando la expresión "x / y + (x * x * y + 18.243 * y) / z" - donde las variables son números de coma flotante de doble precisión.
- Función C ++: 144.1 millones de evaluaciones por segundo.
- MathPresso: 133.8 millones de evaluaciones por segundo
Otro enfoque es incrustar un lenguaje interpretado en su aplicación y usar el analizador matemático de ese lenguaje.
LUA se está volviendo popular para esto - vea Cómo incrustar lua en c ++ a través de SWIG
Prueba mi biblioteca ae , que se basa en Lua. Vea también Evaluando expresiones matemáticas usando Lua
Siempre he usado muParser , escrito en C ++, para analizar. No vas a tener una biblioteca que pueda hacer integración; Simplemente demasiado difícil sin una biblioteca seria de peso pesado. Existen integradores simbólicos de código abierto como Maxima, Octave, etc., pero son difíciles de interactuar y esa funcionalidad no se puede separar fácilmente del resto del proyecto.
También está GNU libmatheval , que hace evaluación y diferenciación. La integración es un problema mucho harder , incluso para integrandes de aspecto inocente.
Tenía una necesidad de programación similar en la que usé el algoritmo Shunting yard . Útil para analizar la notación infijo como lo has hecho.
Octave puede hacer esto y puede ser llamado desde un programa C ++ . Incluso puede llamar código C ++ desde octava fácilmente usando SWIG para generar la interfaz.