【问题标题】:what will be atan2 output for both x and y as 0x 和 y 的 atan2 输出为 0
【发布时间】:2018-06-03 04:35:53
【问题描述】:
theta=atan2(0,0);

这个语句的输出是0,但是它是0/0的形式,所以它的输出怎么可能是0,连wikipedia都说应该是undefined,请解释一下为什么编译器给这个语句的输出是0。

【问题讨论】:

  • C 标准说atan2(0, 0) 是一个域错误,这会导致实现定义的返回值。
  • 严格来说,标准规定“如果两个参数都为零,则可能会发生域错误。”最终结果大致相同。该标准还在第 7.12.1 节错误条件的处理中详细说明了应该发生的情况。
  • 您是否在问当行为未定义时会发生什么样的行为..?

标签: c undefined trigonometry angle atan2


【解决方案1】:

x 和 y 的 atan2 输出为 0

C 有 2 个相关规范。 @Oliver Charlesworth@Jonathan Leffler

atan2 函数 ...如果两个参数都为零,则可能会发生域错误。 C11dr §7.12.4.4 2

错误条件的处理 ...对于所有函数,如果输入参数位于定义数学函数的域之外,则会发生域错误。 ...;在一个 域错误,函数返回实现定义的值;... §7.12.1 3

atan2(0,0)可能会导致0.0, 1.0, INF, NAN等。除了返回一些东西之外没有指定。

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


为了与 IEC-60559 兼容(尽管许多实现都力求遵守,但 C 语言并不要求这样做),以下结果是强制性的。注意由于 ±0 引起的差异。

atan2(±0, −0) returns ±π
atan2(±0, +0) returns ±0.

关于π 的注释。 π 是一个无理数并且所有有限的double 都是有理数,machine pi(最接近可表示的double 到 π)的返回值预计与atan2(+0, -0)


短版

"x 和 y 的 atan2 输出为 0"

零。

“它的输出怎么可能是0,甚至维基百科都说它应该是未定义的”

维基百科没有定义 C 或各种数学库规范 - 它是一个参考 - 不是一个规范。

"为什么编译器给出 0"

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

【讨论】:

  • 另请注意,如果 IEC-60559 兼容,标准强制此值(参见附录 F)。
  • 你能不能用一些简单的方式解释一下,我无法正确理解你所说的?
  • @user9121710 缩短附加答案。
猜你喜欢
  • 1970-01-01
  • 2010-11-05
  • 2014-11-05
  • 2020-03-27
  • 2020-04-28
  • 2014-11-09
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多