C++ математическая библиотека constexpr (только для заголовков)

Я хотел бы использовать расширение семантики constexpr С++ 14 для вычисления некоторых математических формул во время компиляции. Но - я не хочу "выкатывать свои собственные" версии constexpr sqrt(), log()и т. д sin(). Дело не в том, что я не мог этого сделать, просто это было бы изобретением велосипеда.

Так кто-нибудь публиковал такую ​​библиотеку?

Заметки:

  • Должен быть независимым от платформы.
  • Никаких зависимостей Boost, пожалуйста.
  • Он должен быть основан на C++14; просто С++ 11 сделал бы довольно надуманную реализацию.
  • Поскольку мы говорим здесь о constexpr, он должен быть переносимым, а детали оборудования и ОС не должны иметь большого значения.
Нужны подробности о том, какая платформа, ЦП, ОС и т. Д., Чтобы, возможно, ответить.
@SteveBarnes: это материал constexpr - я просто ищу кучу файлов .hpp; почему любая из этих деталей имеет значение?
Это важно, потому что, например, любые «ярлыки» сборки будут зависеть от процессора.
@SteveBarnes: #ifdef CAN_TAKE_SHORTCUT shortcut_code; #else regular_code; #endif... во всяком случае, удалил текст о трюках сборки.

Ответы (3)

росток

«Контейнеры, алгоритмы, случайные числа, синтаксический анализ, трассировка лучей, синтезатор и другие на основе C++ 11/14 constexpr».

Болеро Мураками (кажется, это имя)

Сайты: Основной сайт | Репозиторий GitHub .

  • С++ 11
  • Никаких релизов, используйте ветку master
  • Обновляется редко
  • Повышение лицензии на программное обеспечение

Предостережения:

  • Я не пробовал.
  • Если он основан на С++ 11, могут быть проблемы с производительностью (относительно времени компиляции).
  • Кажется, что это излишество для простой математики constexpr

GCEM — обобщенная математика constexpr

Кит О'Хара

Сайты: Основной сайт | Репозиторий GitHub .

  • С++ 11
  • Шаблонно-ориентированный
  • Последний выпуск: 1.12.0 , май 2019 г.
  • Обновляется время от времени

Дополнительные интересные функции с веб-сайта библиотеки:

  • Расширения непрерывных дробей и рядов реализованы с использованием рекурсивных шаблонов.
  • Синтаксис gcem::идентичен стандартной библиотеке C++ ( std::).
  • Протестирован и точен до точности с плавающей запятой по сравнению со стандартной библиотекой C++.
  • Выпущено под разрешительной (не GPL) лицензией.

Предостережение:

  • Я не пробовал.
  • Если он основан на С++ 11, могут быть проблемы с производительностью (относительно времени компиляции).

Если вы используете gcc для компиляции своего C++ 11, то есть плагин GCC python , с которым вы можете делать то, что вам нужно.

Плагин python gcc позволяет вам использовать всю мощь python как часть процесса компиляции и сборки gcc. Учитывая, что python предоставляет полные математические библиотеки, базовые по умолчанию и очень продвинутые из numpy , и этот плагин позволяет вам получить доступ к внутренним компонентам gcc, вы сможете выполнять практически любые вычисления времени компиляции, которые вы можете себе представить.

Это не то, о чем я просил. Я не хочу «использовать мощь python», я хочу иметь возможность использовать более выразительную математику для вычислений во время компиляции.
Python обеспечивает выразительные и исчерпывающие вычисления.
Я уверен, что да, просто это не то, что я ищу. Это не позволит помочь мне создать экземпляр std::arrayдлины, являющейся квадратным корнем чего-то.
@einpoklum - возможно, стоит добавить это и еще пару примеров , а также какой компилятор вы используете и т. Д., К вашему вопросу, чтобы попытаться снова открыть его, поскольку именно такие детали вопроса ищутся.