【问题标题】:Is Groovy Power Operator (**) Broken in Associativity?Groovy Power Operator (**) 是否在关联性中被破坏?
【发布时间】:2020-04-17 07:53:11
【问题描述】:

在 Groovy 3.0 中(Groovy 版本:3.0.0-rc-1 JVM:11.0.2)

println 3**3**3
println 3.0**3.0**3.0

给予

19683
19683

在终端的 Python (Python 3.5.2) 中,我得到了

>>> 3**3**3
7625597484987
>>> (3**3)**3
19683

official site 没有给出任何指示。

到目前为止,Groovy 中的 ** 是否损坏?


编辑

stackoverflowmath.stackexchange 中的答案清楚地表明,数学约定是求幂是右结合的。

缺陷是defined 作为软件产品中的一个条件,它不满足软件需求(如需求规范中所述)或最终用户期望(可能未指定但合理)。

由于这种合理的预期以一种未记录的方式被违反,这不被认为是一个错误吗?

【问题讨论】:

标签: groovy exponentiation


【解决方案1】:

不,它没有坏

与所有其他运算符一样,它只是具有从左到右的关联性

在 python 中,** 具有从右到左的关联性,因此也没有损坏

他们只是有不同的规则

【讨论】:

  • 数学规则通常不会转换为计算机语言(参见 bodmas)。不同的语言对中缀运算符的处理方式不同,您只需学习您感兴趣的语言的规则rosettacode.org/wiki/Exponentiation_order
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 2018-02-26
  • 2010-11-22
  • 2016-07-11
  • 1970-01-01
  • 2013-02-20
相关资源
最近更新 更多