Недавно я решил создать простую программу-калькулятор, но когда дело дошло до показателей степени, я потерялся. Хорошо, вы можете использовать , но я бы предпочел знать, как они решают проблему этой функции, кроме невозможного количества операторов if, например. если(у==2){ х=хх; } else if (y==3){ x=xx*x; } И так далее... Итак, как это сделала функция 'exp(), и как я могу это узнать?
Как узнать содержимое встроенной функции exp() библиотеки числовых значений C из ‹cmath›
Ответы (1)
Из алгоритма вычисления exp(x) или e^x:
Алгоритм вычисления exp(x) или e^x
Этот алгоритм позволяет вычислять exp(x) или e^x, используя только операции сложения, вычитания, умножения и деления. Основная идея состоит в том, чтобы использовать полиномиальную аппроксимацию на шаге 3 для вычисления e^x. Но поскольку это приближение является точным только для малых аргументов x, мы должны выполнить шаги 1 и 2, чтобы уменьшить x до меньшего значения.
Разделить x: запишите x = n + r, где n — ближайшее целое число к x, а r — действительное число от −½ до +½. Тогда e^x = e^n · e^r.
Вычисление e^n: умножьте число e само на себя n раз. До 14 цифр e = 2,7182818284590. Умножение может быть сделано довольно эффективно. Например, e 8 можно вычислить всего за 3 умножения, если записать его как (((e) 2 ) 2 ) 2. Для дальнейшего повышения эффективности можно один раз вычислить различные целые степени e и сохранить их в справочной таблице.
Оцените e^r с помощью полинома: EXP(r)=e^r=1 + r + (r^2)/2 + (r^3)/6 + (r^4)/ 24 + (г^5)/120
Для r между -½ и +½ этот полином имеет точность в пределах ±0,00003.
ИЗМЕНИТЬ:
Если вас интересует оригинальная реализация в библиотеке GNU libc, вы можете скачать исходники с здесь.
if
, ноexp
обрабатывает дробные показатели. - person chris   schedule 22.08.2015