Was ist das Beste (in Bezug auf Einfachheit der Verwendung und Leistung) C++/C++ 11-Bibliothek, die Formeln wie folgt vereinfachen können?C++ lineare Formel, die Bibliothek vereinfacht
(a < 0 && b > 0) || (a < 0 && c > 0) || (a < 0 && c > 1)
zu (z)
a < 0 && (b > 0 || c > 0)
Ich denke, es ist sehr wichtig, eine Sache zu erklären (denn ich sehe diese Frage falsch verstanden ist).
Ich möchte C/C++ - Ausdrücke nicht vereinfachen - ich weiß, der Compiler kann es machen.
Ich mache ein Grafik-Bearbeitungs-Tool. An den Kanten des Graphen gibt es einige Bedingungen für seine Eckpunkte (sagen wir die Eckpunkte sind a
, b
, c
und diese Bedingungen sind wie a<b
, b>0
etc - Bitte beachten Sie, dass diese Bedingungen nicht als "Strings" ausgedrückt werden, sie kann jede Funktion oder Bibliotheksaufruf sein). Während der Verarbeitung sammle ich die Ausdrücke zusammen und vor der weiteren Graph-Verarbeitung möchte ich sie vereinfachen.
Die Bedingungen und Ausdrücke werden zur Laufzeit erstellt.
Ich möchte diese Bibliothek einige Ausdrücke Eingang zu können, wie:
[...]
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);
Natürlich ist diese Bibliothek wird wahrscheinlich viel schönere API haben. Ich habe es als Methodenaufrufe geschrieben, nur um zu zeigen, was ich als zugrunde liegenden Mechanismus erwarte - zu betonen, dass ich keinen Quelle-zu-Quelle-Compiler benötige oder dass diese Frage nicht mit der Quellkompilierungsoptimierung zusammenhängt.
Was sind die "einige Bedingungen", die Sie sprechen (als Antwort auf gnzlbg), geben Sie uns ein Beispiel. – Spundun
Sie wissen auch, dass x = simplifier.newVar() ist ein Funktionsaufruf, der viel komplizierter ist als (x
Spundun
Natürlich ist es komplizierter und diese Bibliothek (nach der ich suche) könnte einen schönen PAI haben, der mir erlaubt zu schreiben '(x