C++ constexpr mathematische Bibliothek (nur Header).

Ich möchte die constexpr-Semantikerweiterung von C++14 verwenden, um einige mathematische Formeln zur Kompilierzeit zu berechnen. Aber - ich möchte nicht "meine eigenen" constexpr-Versionen von sqrt(), log(), sin()usw. "rollen". Es ist nicht so, dass ich es nicht könnte, es ist nur, dass es das Rad neu erfinden würde.

Hat jemand eine solche Bibliothek veröffentlicht?

Anmerkungen:

  • Muss plattformunabhängig sein.
  • Bitte keine Boost-Abhängigkeiten.
  • Es sollte C++14-basiert sein; nur C++11 würde für eine ziemlich erfundene Implementierung sorgen.
  • Da wir hier über constexpr sprechen, sollte es portabel sein und die Hardware- und Betriebssystemdetails sollten nicht wirklich wichtig sein.
Benötigen Sie Details zu Plattform, CPU, Betriebssystem usw., um möglicherweise antworten zu können.
@SteveBarnes: Es ist constexpr-Zeug - ich suche nur nach einer Reihe von .hpp-Dateien; Warum sollten diese Details von Bedeutung sein?
Dies ist wichtig, da beispielsweise alle Assembly-Verknüpfungen CPU-spezifisch sind.
@SteveBarnes: #ifdef CAN_TAKE_SHORTCUT shortcut_code; #else regular_code; #endif... wie auch immer, den Text über Montagetricks entfernt.

Antworten (3)

Sprießen

„C++11/14 constexpr-basierte Container, Algorithmen, Zufallszahlen, Parsing, Raytracing, Synthesizer und andere.“

von Bolero Murakami (ich glaube, das ist der Name)

Webseiten: Hauptseite | GitHub-Repo .

  • C++11
  • Keine Releases, verwenden Sie den Master-Zweig
  • Selten aktualisiert
  • Boost-Softwarelizenz

Vorbehalte:

  • Ich habe es nicht versucht.
  • Wenn es auf C++11 basiert, kann es zu Leistungsproblemen kommen (bzgl. der Kompilierungszeit).
  • Scheint ein bisschen wie ein Overkill für nur Constexpr-Mathematik zu sein

GCEM - Verallgemeinerter constexpr Math

von Keith O’Hara

Webseiten: Hauptseite | GitHub-Repo .

  • C++11
  • Vorlagenorientiert
  • Letzte Version: 1.12.0 , Mai 2019
  • Gelegentlich aktualisiert

Weitere interessante Funktionen auf der Website der Bibliothek:

  • Kettenbruchentwicklungen und Reihenentwicklungen werden unter Verwendung von rekursiven Vorlagen implementiert.
  • Die gcem::Syntax ist identisch mit der C++-Standardbibliothek ( std::).
  • Getestet und genau auf Fließkommagenauigkeit gegenüber der C++-Standardbibliothek.
  • Veröffentlicht unter einer freizügigen (Nicht-GPL) Lizenz.

Vorbehalt:

  • Ich habe es nicht versucht.
  • Wenn es auf C++11 basiert, kann es zu Leistungsproblemen kommen (bzgl. der Kompilierungszeit).

Wenn Sie gcc zum Kompilieren von C++ 11 verwenden, gibt es das GCC-Python-Plugin , mit dem Sie möglicherweise das tun können, was Sie benötigen.

Das Python-GCC-Plugin ermöglicht es Ihnen, die volle Leistungsfähigkeit von Python als Teil Ihres GCC-Kompilierungs- und Erstellungsprozesses zu nutzen. Angesichts der Tatsache, dass Python vollständige mathematische Bibliotheken bereitstellt , standardmäßig einfach und sehr fortgeschritten von numpy , und dieses Plugin Ihnen den Zugriff auf gcc-Interna ermöglicht, sollten Sie in der Lage sein, fast alle Berechnungen zur Kompilierzeit durchzuführen, die Sie sich vorstellen können.

Darum habe ich nicht gebeten. Ich möchte nicht "die Leistungsfähigkeit von Python nutzen", ich möchte in der Lage sein, etwas ausdrucksstärkere Mathematik für Berechnungen zur Kompilierzeit zu verwenden.
Python bietet ausdrucksstarke und umfassende Berechnungen.
Ich bin sicher, es tut es, es ist nur nicht das, wonach ich suche. Es wird mir nicht erlauben, eine Länge zu instanziieren std::array, die die Quadratwurzel von etwas ist.
@einpoklum - es könnte sich lohnen, das und ein paar weitere Beispiele sowie den verwendeten Compiler usw. zu Ihrer Frage hinzuzufügen, um zu versuchen, sie erneut zu öffnen, da dies die Art von Fragendetails ist, nach denen gesucht wird.