假设 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
中的注释部分
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