似乎 C 中的 atan2(0,0) 被定义为 this way 。 Python 只是将常见的三角函数委托(delegate)给底层的 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 标准行为。有一些关于这种效果的全面声明,例如文档顶部附近的这个:



而这个靠近底部的:



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

关于python - 假设 atan2(0,0) 返回 0 是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55037585/

10-15 08:45