Как рассчитать постоянную Эйлера или питание Эйлера в C++?

Я пытаюсь найти более "естественный" способ использовать число e в C/C++. Я сосредоточен на вычислении функции е^ п.

Я думаю, что "cmath", по умолчанию, не обеспечивает поддержку как (функции, так и константы). Однако можно включить константы, определенные компилятором, в этом случае M_E, Это может быть сделано путем включения заявления #define _USE_MATH_DEFINES,

С другой стороны, e можно определить как константу:

#define E 2.71828182845904523536;

или же

const double EULER = 2.71828182845904523536;

Сказал это. Какой самый "стандартный" способ приближения к этой математической константе? Это какая-то другая библиотека?

3 ответа

Решение

Если вы можете избежать использования символа препроцессора, вы должны. Это доставит вам неприятности, когда вы меньше всего этого ожидаете. E скорее всего, будет переменной.

Предложенное решение:

#include <cmath>
const double EulerConstant = std::exp(1.0);

Преимущество вычисления константы вместо присваивания литерала с плавающей запятой состоит в том, что она будет давать результат с точностью, соответствующей точности double тип данных для вашей конкретной реализации C++. И это исключает возможность внесения ошибки, случайно пропуская цифру.

Как показано выше, <cmath> объявляет std::exp так что вам не нужно кататься самостоятельно.

C++20 std::numbers::e

C++20 has also added an e constant to the standard library: http://eel.is/c++draft/numbers

I expect the usage to be like:

#include <math>
#include <iostream>

int main() {
    std::cout << std::numbers::e << std::endl;
}

I'll give it a try when support arrives to GCC, GCC 9.1.0 with g++-9 -std=c++2a still doesn't support it.

The accepted proposal describes:

5.0. “Headers” [headers] In the table [tab:cpp.library.headers], a new header needs to be added.

[...]

namespace std {
namespace math { 
template<typename T > inline constexpr T e_v = unspecified;
inline constexpr double e = e_v<double>;

There is also a std::numbers::pi of course:-) How to use the PI constant in C++

These constants use the C++14 variable template feature: C++14 Variable Templates: what is their purpose? Any usage example?

In earlier versions of the draft, the constant was under std::math::e: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0631r7.pdf

Я столкнулся с этой школьной проблемой и решил, что вычисляю число Эйлера без cmath. Итак, нам нужно посчитать 1 + 1/1! + 1/2! + ... + 1 / п !.

Я использую рекурсивные функции, чтобы добиться этого (основное предназначено только для тестирования моего решения о е):

      #include <iostream>
#include <iomanip>
using namespace std;

double Factorial(int n){    // Max n = 170
    if(n==1) return 1;
    else return n * Factorial(n-1);
}

double GetEuler(int n){
    if(n == 0) return 1;
    else return (1/Factorial(n) + GetEuler(n-1));
}

int main(){
    int n;
    double e;

    e = GetEuler(170);
    cout << setprecision(15) << e << endl;

    return 0;
}

Выход: 2.71828182845905

Другие вопросы по тегам