是否可以安全地假设atan2(0,0)返回0?

时间:2019-03-07 06:43:38

标签: python c atan2

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

2 个答案:

答案 0 :(得分:5)

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的标准的一部分。

答案 1 :(得分:2)

正如@ user2357112所说,文档未指定。如果您需要详细记录的内容,请使用numpy.arctan2-请参阅https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.arctan2.html

中的“注释”部分