2013-09-12 14 views
7

Я пытаюсь найти более «естественный» способ использовать номер e в C/C++. Я сосредоточен на вычислении функции e^n.Как рассчитать константу Эйлера или Эйлера, работающую на C++?

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

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

#define E 2.71828182845904523536; 

или

const double EULER = 2.71828182845904523536; 

говорил это. Какой из них является «стандартным» способом приблизиться к этой математической константе? Это какая-то другая библиотека?

+1

при расчете * e^n *, является 'n' целым, вещественным или сложным? Только если это целое число, будет 'std :: pow (Euler, n)' возможно более эффективным, чем просто 'std :: exp (n)'. – Walter

ответ

13

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

Предлагаемое решение:

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

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

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

+1

Согласен! И const double лучше, чем #define. См. «Эффективный C++» Скотта Мейерса 1 – BigTailWolf

+0

Следует также отметить, что 'std :: exp' принимает аргумент мощности, поэтому, если вы хотите рассчитать' e^n', сохранение константы является излишним, поскольку вы можете просто напишите его как 'std :: exp (n)'. –

Смежные вопросы