Какова область определения тригонометрических функций в Эйфелевой системе? Это [-pi/4,+pi/4]?

В Eiffel класс DOUBLE_MATH определяет тригонометрические функции. Когда я вижу интерфейс этого класса, как показано здесь, там написано

косинус (v: REAL_64): REAL_64 -- Тригонометрический косинус радиана `v', приблизительный -- в диапазоне [-pi/4, +pi/4]

и

sine (v: REAL_64): REAL_64 -- Тригонометрический синус радиана `v' приблизительно -- в диапазоне [-pi/4, +pi/4]

и

тангенс (v: REAL_64): REAL_64 -- тригонометрический тангенс радиана `v' приблизительно -- в диапазоне [-pi/4, +pi/4]

Кажется, утверждается, что тригонометрические функции будут работать только в области [-pi/4,+pi/4]. Однако, когда я попытался использовать их для других значений, они, похоже, сработали.

Я беспокоюсь, что это может иногда дать сбой или что успех, который я увидел, на самом деле является формой неопределенного поведения, на которое нельзя полагаться.

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


person GoodDeeds    schedule 06.11.2016    source источник
comment
Обратите внимание, что документация функций arcus просто неверна, аргументы указаны не в радианах, а просто в числах, и заданный диапазон не является областью = диапазоном аргументов, как в случае с другими функциями, а является диапазоном (значений) функции. И даже это не подходит для arc_tangent.   -  person Lutz Lehmann    schedule 06.11.2016
comment
@LutzL О да, я этого не заметил. Так вы говорите, что они ненадежны?   -  person GoodDeeds    schedule 06.11.2016
comment
Я думаю, что вы можете использовать функции без ограничений. Однако гарантии точности распространяются только на малые аргументы.   -  person Lutz Lehmann    schedule 06.11.2016


Ответы (1)


Функции реализованы как оболочки соответствующих функций C из math.h. Поскольку Eiffel может быть скомпилирован практически для любой платформы с помощью компилятора C, комментарий гарантирует ограничение домена наиболее ограничивающими доменами реализаций компилятора C. Кроме того, некоторые ЦП обеспечивают прямую поддержку тригонометрических функций, но их точность снижается, если входное значение выходит за пределы заданного диапазона.

Подводя итог, вам нужно проверить руководство по компилятору C для платформ, которые вы собираетесь использовать для конкретных диапазонов тригонометрических функций, или, в качестве альтернативы, убедиться, что входное значение находится в диапазоне, указанном в комментарии.

person Alexander Kogtenkov    schedule 06.11.2016
comment
Хотя это правда, это делает эти функции Эйфеля довольно бесполезными ИМХО. - person U. Windl; 24.05.2021