Как правильно вычислить округленные тригонометрические функции в градусах?

Как я могу определить тригонометрические функции, которые принимают аргументы в градусах вместо обычных радианов, и вычислить правильно округленные результаты для этих аргументов?

Умножение аргумента наM_PI/180.0 перед передачей его соответствующей функции в радианах не работает, т.к.M_PI/180.0 это не π / 180. Раздел 5.5 Руководства по арифметике с плавающей точкой предлагает метод для вычисления правильно округленного произведения аргумента на π / 180, но некоторые аргументы все равно будут такими, что этот продукт будет близок к средней точке между двумя последовательными представимыми числами с плавающей точкой, а затем применение даже правильно округленной функции в радианах может привести к неверному конечному результату.

Две стратегии, которые могут работать в одиночку или в комбинации, используют более высокую точность и использованиеsinpi,cospi, tanpi тригонометрические функции изCRlibmчто посчитать соответственноsin(πx), cos(πx) а такжеtan(πx).

Для последней стратегии остается проблема деления на 180, что не является точным для многих аргументов.

Что касается стратегии более высокой точности (умножение аргумента на представление с расширенной точностью π / 180, затем применение функции расширенной точности в радианах), может остаться проблема с «точными» случаями. Теорема, которая утверждает, что единственные рациональные результатыsin, cos а такжеtan для рационального аргумента получены в0 относится только к версиям в радианах. Очевидно, что это не относится к версиям степеней, и если для некоторого ввода x с плавающей запятой sindeg (x) является точно средней точкой между двумя последовательными представимыми числами с плавающей запятой, то никакой промежуточной точности недостаточно для гарантии того, что окончательная результат правильно округлен.

Ответы на вопрос(4)

Ваш ответ на вопрос