x 和 y 的 atan2 输出都是 0

what will be atan2 output for both x and y as 0

theta=atan2(0,0);

这条语句的输出是0,但是是0/0的形式,怎么会输出0,连wikipedia都说应该是undefined,请解释为什么编译器给出0作为这条语句的输出.

what will be atan2 output for both x and y as 0

C有2个相关规范。

The atan2 functions ... A domain error may occur if both arguments are zero. C11dr §7.12.4.4 2

Treatment of error conditions ...For all functions, a domain error occurs if an input argument is outside the domain over which the mathematical function is defined. ...; On a domain error, the function returns an implementation-defined value;... §7.12.1 3

atan2(0,0) 可能会导致 0.0, 1.0, INF, NAN,等等。除了 returned.

之外没有指定

0 当然是一个合理的选择,但没有明确的数学正确结果 - 它未定义。


为了与 IEC-60559 兼容(尽管许多实现努力遵守,但 C 并不要求),强制要求以下结果。请注意由于 ±0.

引起的差异
atan2(±0, −0) returns ±π
atan2(±0, +0) returns ±0.

关于 π 的注释。 π 是一个无理数,所有有限 double 都是有理数, 机器 pi 的 return 值(最接近 π 的可表示 double)是预期的atan2(+0, -0).


更短的版本

"what will be atan2 output for both x and y as 0"

零。

"how its output can be 0, even wikipedia says that it should be undefined"

维基百科既没有定义 C 也没有定义各种数学库规范 - 它是参考 - 而不是规范。

"why compiler gives 0"

这是各种 C 实现经常使用的浮点标准 IEC-60559/IEEE 754 的指定响应。