Как вычислить константу Эйлера или Euler, работающую на С++?
Я пытаюсь найти более "естественный" способ использовать число e в C/С++. Я сосредоточен на вычислении функции e ^ n.
Я думаю, что "cmath", по умолчанию, не обеспечивает поддержку как (функция, так и константа). Однако можно включить константы, определенные компилятором, в этом случае M_E
. Это можно сделать, включив оператор #define _USE_MATH_DEFINES
.
С другой стороны, e можно определить как константу:
#define E 2.71828182845904523536;
или
const double EULER = 2.71828182845904523536;
Сказал это. Какой из них является "стандартным" способом приблизиться к этой математической константе? Это какая-то другая библиотека?
Ответы
Ответ 1
Если вы можете избежать использования символа препроцессора, вы должны. Это вызовет у вас проблемы, когда вы меньше всего этого ожидаете. E
, вероятно, будет переменной.
Предлагаемое решение:
#include <cmath>
const double EulerConstant = std::exp(1.0);
Преимущество вычисления константы вместо назначения литерала с плавающей запятой заключается в том, что оно будет давать результат с точностью, которая соответствует точности типа данных double
для вашей конкретной реализации на С++. И это исключает возможность введения ошибки, случайно пропуская цифру.
Как показано выше, <cmath>
объявляет std::exp
, поэтому вам не нужно откатывать свои собственные.
Ответ 2
C++ 20 std::numbers::e
C++ 20 также добавил константу e
в стандартную библиотеку: http://eel.is/C++draft/numbers
Я ожидаю, что использование будет как:
#include <math>
#include <iostream>
int main() {
std::cout << std::numbers::e << std::endl;
}
Я попробую, когда поддержка придет в GCC, GCC 9.1.0 с g++-9 -std=c++2a
все еще не поддерживает его.
В принятом предложении описывается:
5.0. "Заголовки" [заголовки] В таблице [tab: cpp.library.headers] необходимо добавить новый заголовок.
[...]
namespace std {
namespace math {
template<typename T > inline constexpr T e_v = unspecified;
inline constexpr double e = e_v<double>;
Существует также std::numbers::pi
, конечно :-) Как использовать константу PI в C++
Эти константы используют функцию шаблона переменных C++ 14: C++ 14 Шаблоны переменных: какова их цель? Любой пример использования?
В более ранних версиях проекта константа находилась под std::math::e
: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0631r7.pdf