Какова наилучшая (с точки зрения простоты использования и производительности) библиотека С++/С++ 11, которая упрощает такие формулы, как следующее?
(a < 0 && b > 0) || (a < 0 && c > 0) || (a < 0 && c > 1)
до (например)
a < 0 && (b > 0 || c > 0)
Я думаю, что очень важно объяснить одно (потому что я вижу, что этот вопрос неправильно понял).
Я не хочу упрощать выражения 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. Я написал это как вызов метода только для того, чтобы показать, что я ожидаю быть основным механизмом - подчеркнуть, что мне не нужен источник для исходного компилятора или этот вопрос не связан с оптимизацией исходной компиляции.