【发布时间】:2019-03-07 06:43:37
【问题描述】:
似乎 C 中的atan2(0,0) 定义为this way。 Python 只是将常见的三角函数委托给底层的 C 实现,对吧?
【问题讨论】:
似乎 C 中的atan2(0,0) 定义为this way。 Python 只是将常见的三角函数委托给底层的 C 实现,对吧?
【问题讨论】:
Python 文档没有明确指定 atan2(0, 0),但 CPython implementation 致力于确保特殊情况遵循 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 标准定义的数学函数的访问。
这个靠近底部:
在特殊情况下的行为在适当的情况下遵循 C99 标准的附件 F。
虽然附件 F 不是定义 atan2 的标准的一部分。
【讨论】:
正如@user2357112 所说,文档没有指定这一点。如果您需要有据可查的内容 - 使用 numpy.arctan2 - 请参阅 https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.arctan2.html 中的注释部分
【讨论】: