Можно ли предположить, что atan2 (0,0) возвращает 0? - PullRequest
4 голосов
/ 07 марта 2019

Кажется, что atan2(0,0) в C определяется таким образом . Python просто делегирует общие тригонометрические функции базовой реализации C, верно?

Ответы [ 2 ]

5 голосов
/ 07 марта 2019

Документы Python не указывают явно atan2 (0, 0), но реализация CPython требует особых усилий для обеспечения того, чтобы особые случаи следовали C99, даже если базовая библиотека C этого не делает. Это включает в себя путь кода, который обрабатывает возвращение atan2 (0, 0) 0.0:

if (Py_IS_INFINITY(x) || y == 0.) {
    if (copysign(1., x) == 1.)
        /* atan2(+-y, +inf) = atan2(+-0, +x) = +-0. */
        return copysign(0., y);
    ...

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

Этот модуль всегда доступен. Он обеспечивает доступ к математическим функциям, определенным стандартом C.

и вот этот внизу:

Поведение в исключительных случаях соответствует Приложению F стандарта C99, где это необходимо.

хотя Приложение F не является частью стандарта, определяющего atan2.

2 голосов
/ 07 марта 2019

Как сказал @ user2357112, в документах это не указано. Если вам нужно что-то хорошо документированное - используйте numpy.arctan2 - см. Раздел «Примечания» в https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.arctan2.html

...