Biblioteca matemática C++ constexpr (solo encabezado)

Me gustaría utilizar la expansión semántica constexpr de C++ 14 para calcular algunas fórmulas matemáticas en tiempo de compilación. Pero, no quiero "lanzar mis propias" versiones constexpr de sqrt(), log(), sin()etc. No es que no pueda hacerlo, es solo que sería reinventar la rueda.

Entonces, ¿alguien ha publicado una biblioteca de este tipo?

Notas:

  • Debe ser independiente de la plataforma.
  • Sin dependencias de Boost, por favor.
  • Debe estar basado en C++14; solo C ++ 11 sería una implementación bastante artificial.
  • Dado que aquí estamos hablando de constexpr, debería ser portátil y los detalles del hardware y del sistema operativo realmente no deberían importar.
Necesita detalles de qué plataforma, CPU, sistema operativo, etc., posiblemente responda.
@SteveBarnes: Son cosas de constexpr: solo estoy buscando un montón de archivos .hpp; ¿Por qué cualquiera de esos detalles importaría?
Es importante porque, por ejemplo, cualquier "atajo" de ensamblaje será específico de la CPU.
@SteveBarnes: #ifdef CAN_TAKE_SHORTCUT shortcut_code; #else regular_code; #endif... de todos modos, eliminó el texto sobre trucos de ensamblaje.

Respuestas (3)

Brote

"C++ 11/14 contenedores basados ​​en constexpr, algoritmos, números aleatorios, análisis, trazado de rayos, sintetizador y otros".

de Bolero Murakami (creo que así se llama)

Sitios web: Sitio principal | Repositorio de GitHub .

  • C++11
  • Sin lanzamientos, use la rama principal
  • Actualizado raramente
  • Licencia de software de impulso

Advertencias:

  • no lo he probado
  • Si está basado en C++ 11, puede haber problemas de rendimiento (tiempo de compilación wrt)
  • Parece un poco exagerado solo para matemáticas constexpr

GCEM - Matemáticas constexpr generalizadas

por Keith O´Hara

Sitios web: Sitio principal | Repositorio de GitHub .

  • C++11
  • Orientado a plantillas
  • Última versión: 1.12.0 , mayo de 2019
  • Actualizado ocasionalmente

Características adicionales de interés, de la web de la biblioteca:

  • Las expansiones de fracciones continuas y las expansiones de series se implementan utilizando plantillas recursivas.
  • La gcem::sintaxis es idéntica a la biblioteca estándar de C++ ( std::).
  • Probado y preciso con precisión de punto flotante en comparación con la biblioteca estándar de C++.
  • Publicado bajo una licencia permisiva (no GPL).

Advertencia:

  • no lo he probado
  • Si está basado en C++ 11, puede haber problemas de rendimiento (tiempo de compilación wrt)

Si está utilizando gcc para compilar su C ++ 11, entonces existe el complemento GCC python con el que puede hacer lo que necesita.

El complemento python gcc le permite usar todo el poder de python como parte de su proceso de compilación y compilación de gcc. Dado que python proporciona bibliotecas matemáticas completas, básicas de forma predeterminada y muy avanzadas desde numpy , y este complemento le permite acceder a las funciones internas de gcc, debería poder realizar casi cualquier cálculo de tiempo de compilación que pueda imaginar.

Eso no es lo que pedí. No quiero "usar el poder de python", quiero poder usar algunas matemáticas más expresivas para los cálculos en tiempo de compilación.
Python proporciona cálculos expresivos y completos.
Estoy seguro de que sí, simplemente no es lo que estoy buscando. No me permitirá ayudarme a crear una instancia std::arrayde una longitud que sea la raíz cuadrada de algo.
@einpoklum: podría valer la pena agregar eso y un par de ejemplos más, además del compilador que está usando, etc., a su pregunta para tratar de reabrirla, ya que ese es el tipo de detalles de la pregunta que se buscan.