2013-05-11 4 views
1

Любой может объяснить или показать, как функция «грех» (или «sinf», «sinl») реализована в C. Интуиция предполагает, что она должна быть где-то в математике. Но я ничего там не виделКак реализуется функция «грех»?

+0

Что вы подразумеваете под «осознанным»? И содержание math.h отличается на разных платформах компиляции, поэтому нет общего ответа. Обычно он может включать заголовки, зависящие от ОС или аппаратных средств, и удачу, следуя цепочке #includes вплоть до того, что вы ищете. –

+1

В 'math.h' вы можете видеть только декларации (e.h. подписи) функций, а не их определения (например, тела функций). Ознакомьтесь с источниками 'glibc', где вы можете найти реализацию. И да, 'sin' использует быстрый алгоритм (не наивные, необходимые математические навыки) – maverik

+0

http://en.wikipedia.org/wiki/Taylor_series –

ответ

1

Там есть пара способов, которыми я могу думать справа от летучей мыши: столы

  1. Lookup
  2. Сближение через ряд Тейлора (которые могут быть легко сделаны с точностью до числа значащих цифр).
+0

Для аппроксимации полной функции см. Анализ Фурье. –

+0

И спасибо за ссылку. Мне любопытно, однако, можно ли просто использовать две серии: одну локально вокруг 0 ​​и одну локально вокруг PI/2? Затем вы можете просто разделить свой домен на регионы, которые должны быть рассчитаны функцией A и областями, которые должны быть вычислены функцией B. Однако я, вероятно, забываю о каком-то фундаментальном аспекте серии Taylor. –

+1

Вы можете разделить домен на столько интервалов, сколько захотите, это действительно один из методов торговли пространством (эти коэффициенты полинома должны быть где-то сохранены) и время (выбор правильного интервала и загрузка коэффициентов с пропуском кеша) для точности, но на любом одном интервале коэффициенты, вычисленные с помощью алгоритма Ремеза, все равно будут выходить за пределы расширения Тейлора. Так вот что используется. –