Как узнать содержимое встроенной функции exp() библиотеки числовых значений C из ‹cmath›

Недавно я решил создать простую программу-калькулятор, но когда дело дошло до показателей степени, я потерялся. Хорошо, вы можете использовать , но я бы предпочел знать, как они решают проблему этой функции, кроме невозможного количества операторов if, например. если(у==2){ х=хх; } else if (y==3){ x=xx*x; } И так далее... Итак, как это сделала функция 'exp(), и как я могу это узнать?


person NightHawk    schedule 22.08.2015    source источник
comment
@старк хорошо. если я удалю этот пост, моя репутация вернется к той, что была до того, как я спросил? И также это не вопрос, это вопрос о попытке выяснить. как я могу увидеть Exp() в каталоге предварительной обработки ‹cmath›?   -  person NightHawk    schedule 22.08.2015
comment
@NightHawk, вы должны быть осторожны, удаляя слишком много вопросов. В любом случае, большинство из этих основных реализаций стандартной библиотеки C имеют открытый исходный код. Случай с целочисленным показателем можно было бы легко реализовать с помощью цикла вместо множества операторов if, но exp обрабатывает дробные показатели.   -  person chris    schedule 22.08.2015
comment
Вы можете просмотреть исходный код библиотек с открытым исходным кодом, таких как glibc или fdlibm. Вы также можете увидеть некоторые рабочие примеры в ответе на это вопрос   -  person njuffa    schedule 22.08.2015
comment
@Chris, почему, что произойдет, если я удалю многие вопросы, спасибо за искренний ответ, а не за менталитет уровня YouTube некоторых из ваших сверстников.   -  person NightHawk    schedule 22.08.2015
comment
@NightHawk, я думал о запретах вопросов, которые включают в себя значительное количество сильно проголосовавших, ноль- проголосовали или удалили сообщения. Однако я не могу сказать, что много знаю о том, как это работает, в том числе о том, способствует ли удаление многих ваших собственных сообщений. Моя ненадежная память говорит, что другие пользователи на сайте указали, что это возможно.   -  person chris    schedule 22.08.2015
comment
@stark Я думал, что это реальный сайт, есть ли место для оскорблений?   -  person NightHawk    schedule 22.08.2015


Ответы (1)


Из алгоритма вычисления exp(x) или e^x:

Алгоритм вычисления exp(x) или e^x

Этот алгоритм позволяет вычислять exp(x) или e^x, используя только операции сложения, вычитания, умножения и деления. Основная идея состоит в том, чтобы использовать полиномиальную аппроксимацию на шаге 3 для вычисления e^x. Но поскольку это приближение является точным только для малых аргументов x, мы должны выполнить шаги 1 и 2, чтобы уменьшить x до меньшего значения.

  1. Разделить x: запишите x = n + r, где n — ближайшее целое число к x, а r — действительное число от −½ до +½. Тогда e^x = e^n · e^r.

  2. Вычисление e^n: умножьте число e само на себя n раз. До 14 цифр e = 2,7182818284590. Умножение может быть сделано довольно эффективно. Например, e 8 можно вычислить всего за 3 умножения, если записать его как (((e) 2 ) 2 ) 2. Для дальнейшего повышения эффективности можно один раз вычислить различные целые степени e и сохранить их в справочной таблице.

  3. Оцените e^r с помощью полинома: EXP(r)=e^r=1 + r + (r^2)/2 + (r^3)/6 + (r^4)/ 24 + (г^5)/120

    Для r между -½ и +½ этот полином имеет точность в пределах ±0,00003.

ИЗМЕНИТЬ:

Если вас интересует оригинальная реализация в библиотеке GNU libc, вы можете скачать исходники с здесь.

person Alex Lop.    schedule 22.08.2015
comment
Спасибо. Но есть ли способ найти точное содержимое exp()? Я знаю, как работают экспоненты. - person NightHawk; 22.08.2015
comment
@NightHawk Я отредактировал свой ответ ссылкой на источники библиотеки GNU libc. Вы можете найти там математическую библиотеку. Удачи. - person Alex Lop.; 22.08.2015