Ich benutze Sympy, um eine benutzerdefinierte Eingabefunktion zu manipulieren und zu differenzieren, um eine C++ - Bibliothek zu generieren, die mit einem externen C++ - Programm verwendet werden soll. Es funktioniert super, außer dass Sympy 1/2 als 1.0L/2.0L ausdrückt. Fein, außer dass einige der Variablen im Hauptcode vom Typ std :: complex sind, verursacht dies einen Fehler bei der Kompilierung, da es nicht (implizit) einen Komplex mit langen Doubles multiplizieren/addieren/subtrahieren kann (oder ints, für diese Angelegenheit). Ich habe versucht, mit -std = C++ 14 zu kompilieren, da dies mehr Unterstützung für implizites Typcasting bietet, aber das "Problem" bleibt bestehen.sympy ccode Nummer Typ
In der Zwischenzeit habe ich eine Reihe von Hilfsfunktionen geschrieben, um mit diesen Operationen umzugehen, aber ich frage mich, ob es irgendeinen Weg gibt, Sympy zu sagen, irgendeinen numerischen Wert auszugeben, den es als Doppel hat? Anstatt beispielsweise 1.0L/2.0L an den C-Code auszugeben, kann ich ihn zwingen, nur 1.0/2.0 (oder sogar 0.5) zu schreiben? Ebenso, anstatt einen int wie 2 zu schreiben, möchte ich 2.0 schreiben. Ich habe versucht, das Präzisionsflag (im Funktionsaufruf sympy.printing.ccode) einzustellen, aber es hat nichts geändert. Ich konnte anscheinend nichts online finden
Ich wäre sehr dankbar für jeden Rat.
Vielen Dank, Sam
Danke, @asmeurer, das ist eine große Hilfe. Da ich alle Vorkommen von 'L' entfernen wollte, habe ich dann' CCodePrinter._print_Rational = MyCCodePrinter._print_Rational' verwendet, um die '_print_Rational' Funktion, die von' sympy.printing.ccode() 'verwendet wird, an meine Unterklasse neu zu binden. Genau das habe ich gesucht. – samwise
Es ist nicht nötig, den SymPy-Code zu patchen. Sie können aus Ihrer Klasse mit 'doprint' drucken. Siehe meine aktualisierte Antwort. – asmeurer
Ah danke, das ist viel besser. Entschuldigung, ich bin ziemlich neu in Python. Wenn ich genug Repräsentieren würde, um deine Antwort zu verbessern, würde ich das tun! – samwise