atan2(0,0)返回0是安全的假设吗?

4

看起来在C语言中atan2(0,0)是这样定义的(参考链接)。Python只是将常见的三角函数委托给底层的C实现,对吗?

2个回答

5
Python文档没有明确说明atan2(0, 0),但CPython实现特别注意确保即使基础的C库不支持,特殊情况也遵循C99标准。这包括处理使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 的标准部分。

谢谢。我真正需要的是CPython,其他各种实现对我的需求不相关。 - Emanuel Landeholm

2

这是一个很好的建议。在必要的时候,我经常使用numpy数学库。 - undefined
numpy函数的一个不好的地方是它们比math库中相应的函数慢,这是因为数组相关的开销。但是当对数据数组应用相同的操作时,它会更快。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接