假设 atan2(0,0) returns 0 安全吗?

Is it safe to assume that atan2(0,0) returns 0?

C中的atan2(0,0)好像定义为this way。 Python 只是将常见的三角函数委托给底层 C 实现,对吧?

Python 文档没有明确指定 atan2(0, 0),但 CPython implementation 做出了具体努力以确保特殊情况遵循 C99,即使底层 C 库没有.这包括处理使 atan2(0, 0) return 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 标准行为。对此有一些笼统的陈述,例如文档顶部附近的这个:

This module is always available. It provides access to the mathematical functions defined by the C standard.

靠近底部的这个:

Behavior in exceptional cases follows Annex F of the C99 standard where appropriate.

尽管附件 F 不是定义 atan2 的标准的一部分。

正如@user2357112 所说,文档没有指定这一点。如果您需要有据可查的内容 - 使用 numpy.arctan2 - 请参阅 https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.arctan2.html

中的注释部分