@TreShk0

Алгоритм нахождения синуса любого угла?

Есть ли какой-либо алгоритм нахождения синуса, косинуса, тангенса любого угла. Такой же которыми пользуются калькуляторы
  • Вопрос задан
  • 13007 просмотров
Пригласить эксперта
Ответы на вопрос 6
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Смотря какая точность нужна. Есть формула Бхаскара, работающая на диапазоне от 0° до 180° (0-π):
sin(x°) = 4·x·(180−x)/(40500−x·(180−x))
sin(x) = 16·x·(π−x)/(5·π2−4·x·(π−x))
На большей части диапазона она даёт точность в пределах 0.2%, на краях точность падает до 2%.
Значения для углов вне этого диапазона можно получить из тождества:
sin(2·π+x) = sin(x)
sin(π+x) = -sin(x)
Ответ написан
@res2001
Developer, ex-admin
Ряды Тейлора
И не только для синуса.
Ответ написан
LaRN
@LaRN
Senior Developer
Иногда для скорости используют(вали) табличный метод.
Т.е. создают таблицу в памяти с вычисленными значениями функции(с нужной точностью)
для какого-то фиксированного шага по углу.
Если попадаем между узлами сетки таблицы углов, то используем интерполяцию.
Ответ написан
Комментировать
@AlexSku
не буду отвечать из-за модератора
1) в арифметическом сопроцессоре длина дробных чисел 10 байт, а не 8(double), так что точность повыше.

2) ряды Фурье применять тяжело, т.к. факториал (в знаменателе каждой дроби) быстро растёт.

3) есть метод CORDIC, который по небольшой таблице может рассчитать любую точность.

4) слышал на видеосеминаре, что скорее всего используются многочлены Чебышёва (знай наших!)
Ответ написан
Комментировать
Vlad_IT
@Vlad_IT
Front-end разработчик
Гуглите - приближенное вычисление синуса (подставьте нужную).
Дело в том, что нет четкой формулы для нахождения значений этих функций, есть только приближенные, которые можно вычислять с заданной точностью, чем выше точность, тем дольше будет вычисляться.
Ответ написан
@Aenigma
Самым быстрым и точным, но не экономичным, считается метод интерполяции в таблице. Однако существуют более экономичные и почти столь же быстрые (а, возможно, и более быстрые) методы вычисления трансцендентных функций - это аппроксимации по методу Чебышёва и Паде-Чебышёва. Производительность соответствующих алгоритмов будет зависеть от требуемой точности. Например, для аппроксимации тригонометрических функций с одинарной точностью (7-8 значащих десятичных цифр) по методу Чебышёва, как правило, достаточно использовать многочлен с 5-ю слагаемыми. Его вычисление настолько быстрое, что может превосходить по скорости табличный метод. Для вычисления функций с двойной и более высокой точностью лучшие результаты достигаются по методу Паде-Чебышёва (аппроксимация дробно-рациональной функцией).

Дополнительным достоинством данных методов в том, что с помощью векторных команд несложно сделать, например, параллельное вычисление синуса и косинуса одного аргумента. В методе Паде-Чебышёва с помощью векторных команд возможно параллельное вычисление числителя и знаменателя функции, что почти вдвое повышает производительность. Я проверял производительность функции вычисления натурального логарифма с двойной точностью, написанной по методу Паде-Чебышёва, она превосходила стандартную библиотечную функцию. С одинарной точностью - ещё быстрее.

В качестве примера вот ссылка на быструю функцию вычисления тангенса в градусах с одинарной точностью по методу Чебышёва (сообщение от 2021-09-20 13:12:22):
https://codengineering.ru/q/bystraya-realizaciya-t...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы