可以简化如下公式的最好的(就使用和性能而言)C++/C++11 库是什么?
(a < 0 && b > 0) || (a < 0 && c > 0) || (a < 0 && c > 1)
到(例如)
a < 0 && (b > 0 || c > 0)
我认为解释一件事非常重要(因为我看到这个问题被误解了)。
我不想简化 C/C++ 表达式——我知道,编译器可以做到。
我正在制作一个图形处理工具。在图的边缘,有一些关于其顶点的条件(假设顶点是a
, b
,c
这些条件类似于a<b
等b>0
- 请注意,这些条件不表示为“字符串”,它们可以是任何函数或图书馆调用)。在处理过程中,我将表达式收集在一起,在进一步的图形处理之前,我想简化它们。
条件和表达式将在运行时创建。
我希望能够向该库输入一些表达式,例如:
[...]
a = new Variable();
b = new Variable();
expr1 = lib.addExpr(a,0, lib.LESS);
expr2 = lib.addExpr(b,0, lib.MORE);
expr3 = lib.addExpr(expr1, expr2, lib.AND);
[...]
cout << lib.solve(exprn).getConditionsOf(a);
当然这个库可能会有更多漂亮的 API。我把它写成方法调用只是为了展示我期望的底层机制——强调我不需要源代码编译器或者这个问题与源代码编译优化无关。