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 的指定响应。
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 的指定响应。