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

Ema*_*olm 4 c python atan2

看来,atan2(0,0)在C定义这种方式。Python只是将常见的三角函数委托给底层的C实现,对吗?

use*_*ica 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);
    ...
Run Code Online (Sandbox Code Playgroud)

通常,math模块中提供的与C标准库功能相对应的功能应与C标准行为相匹配。有一些关于这种效果的概括性声明,例如靠近文档顶部的一个声明:

此模块始终可用。它提供对C标准定义的数学函数的访问。

而这个靠近底部的位置:

特殊情况下的行为应遵循C99标准的附录F。

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