Современные реализации тригонометрических функций в математических библиотеках работают корректно во всей области ввода.Они делают это путем представления некоторой константы, связанной с π, такой как 2 / π, с достаточной точностью для используемого формата с плавающей запятой.
Например, для уменьшения функции триггера в двойной точности IEEE необходимо представить константу примерно до 1150 битов, чтобы использовать ее, по сути, для вычисления с фиксированной запятой.Этот подход был впервые предложен авторами следующей статьи:
M.Пейн и Р. Ханек.Уменьшение радиана для тригонометрических функций.Информационный бюллетень SIGNUM, 18: 19–24, 1983
Оригинальная идея с тех пор была изменена и усовершенствована другими авторами;возможны как варианты с плавающей точкой, так и целочисленные.Библиотека FDLIBM предоставляет полностью проработанный пример:
http://www.netlib.org/fdlibm/e_rem_pio2.c
В следующей статье автора FDLIBM описан подход, использованный в этом коде
http://www.validlab.com/arg.pdf KC Ng.Сокращение аргумента для огромных аргументов: от хорошего до последнего бита
Обратите внимание, что нет необходимости переносить промежуточное вычисление в 1150 бит.Поскольку при сокращении ведущие биты отменяют вычисление, нужно только задействовать гораздо меньшую группу битов внутри полной константы.Из-за необходимости использования арифметики с высокой точностью это все еще довольно дорогая операция.
Для сокращения аргументов тригонометрической функции в более жестких ограниченных диапазонах возможны другие, более экономичные схемы, особенно когда аппаратное обеспечение поддерживает FMA (слияние-многократное сложение).
Методы, используемые для тригонометрических аргументовсокращение кажется расширяемым на произвольные высокоточные константы.