代码之家  ›  专栏  ›  技术社区  ›  Brian Hooper

运算符优先级“pow”和“root”

  •  0
  • Brian Hooper  · 技术社区  · 14 年前

    我正在为整数编写一个自制的计算器,它包括两个二进制运算符“pow”和“root”。“pow”运算符计算(左操作数)^(右操作数),“root”运算符查找最大数n,使n^(左操作数)<=(右操作数)。

    假设这不是一件荒谬的事情,那么这些操作符的优先级应该是什么呢?目前我有相同的优先顺序,所以字符串,如

    3 root 1500 pow 7
    

    4 回复  |  直到 14 年前
        1
  •  5
  •   tdammers    14 年前

    pow root 本质上是相同的操作,表达方式不同(类似于二进制+和-)。即。, sqrt(a) 与相同 pow(a, 0.5) ,就像 a + b 与相同 a - (-b) . 所以我认为它们应该具有同等的优先权,因此应该从左到右进行计算。

        2
  •  2
  •   deinst    14 年前

    在大多数其他语言中,指数运算是从右向左的。这是因为(a^b)^c=a^(b*c)!=a^(b^c)。例如,请参见中的power operator部分 Python (第5.4节)

        3
  •  1
  •   ZXX    14 年前

    在这种特殊情况下,优先权似乎很好-在某些情况下,您会遇到与优先权等价的关联性问题。原因是你使args到root的顺序与pow相反,我们倾向于将其视为一个“自然”的顺序-左arg受右arg的作用,而yuour root实际上只是pow到1/y。

    因此,您可能需要对更复杂的表达式进行一些实验,比如根B根C pow D根G等等,如果您将根的args保持在与pow相同的顺序,则会更好。

        4
  •  1
  •   Ralph M. Rickenbach    14 年前

    here :

    标准操作顺序,或 优先级表示为 下表。

    • 乘法和除法
    • 加减法

    正如其他人所说

    3 root 1500 = 1500 pow (1/3)
    

    操作数的顺序也很不寻常。我希望1500根3是最大的整数<=1500的立方根。