代码之家  ›  专栏  ›  技术社区  ›  GateKiller

“菩萨”这个词是什么意思?

  •  15
  • GateKiller  · 技术社区  · 16 年前

    Bodmas是什么?为什么它在编程中有用?

    7 回复  |  直到 12 年前
        1
  •  20
  •   Mike Stone    16 年前

    http://www.easymaths.com/What_on_earth_is_Bodmas.htm :

    你认为2+3 x 5的答案是什么?

    是(2+3)x 5=5 x 5=25吗?

    或2+(3 x 5)=2+15=17?

    菩萨可以来拯救我们,并给我们遵守规则,以便我们总是得到正确的答案:

    (b)支架(o)RDER(d)IVISion(m)Ultiplication(a)Addition(s)UBtraction

    根据Bodmas,乘法总是在加法之前完成,因此17实际上是根据Bodmas的正确答案,如果键入2+3 x 5,也将是计算器给出的答案。

    为什么它在编程中有用?不知道,但我想这是因为你可以去掉一些括号?我是一个非常防御性的程序员,所以我的台词可以是这样的:

    result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER;
    

    有了菩萨,你可以让这更清楚一点:

    result = (i + 4 - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
    

    我想我还是会使用第一个变体——更多的方括号,但是这样我就不必再学习另一个规则了,我会遇到忘记它并导致那些奇怪的难以调试的错误的风险更小?

    只是猜测一下那个部分。

    迈克·斯通编辑:盖尔斯指出的固定数学

        2
  •  8
  •   Chris Benard Mafoo    16 年前

    另一个版本(在中学)是“请原谅我亲爱的萨莉阿姨”。

    • 圆括号
    • 指数
    • 乘法
    • 除法
    • 加法
    • 减法

    助记符在学校很有用,在今天的编程中仍然很有用。

        3
  •  5
  •   Patrick McElhaney    16 年前

    表达式中的操作顺序,如:

    foo * (bar + baz^2 / foo) 
    
    • 先拍
    • o RDER(即幂和平方根等)
    • D IVIEW和 Ultiplication(从左到右)
    • 迪斯尼舞曲 S UB牵引力(从左到右)

    来源: http://www.mathsisfun.com/operation-order-bodmas.html

        4
  •  5
  •   Community alpakyol    7 年前

    我没有编辑的权限 @Michael Stum's answer 但这并不完全正确。他减少

    (i + 4) - (a + b)
    

    (i + 4 - a + b)
    

    它们不是等价的。对于整个表达式,我能得到的最好的约简是

    ((i + 4) - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
    

    (i + 4 - a - b) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
    
        5
  •  4
  •   geocoin    16 年前

    当我在小学(在加拿大)学到这一点时,它被称为Bedmas:

    球拍
    e 内容物
    D 伊维斯
    倍增
    迪斯尼
    S 欠牵引

    只是为了那些来自这个世界的人…

        6
  •  1
  •   ricree    16 年前

    我不太确定如何适用于编程的旧博德马记忆法是无论如何。语言之间的操作顺序没有保证,虽然许多语言都保持标准操作的顺序,但并非所有语言都这样。还有一些语言的操作顺序并没有那么有意义(例如Lisp方言)。在某种程度上,如果您忘记了标准顺序,或者对所有内容使用括号(例如(a*b)+c),或者专门学习您使用的每种语言的顺序,那么您的编程可能会更好。

        7
  •  0
  •   Christopher Lightfoot    16 年前

    我读到一些地方,特别是在C/C++中,把你的表达式分解成小的语句对于优化来说是更好的,所以不要把一个行中的复杂表达式写进一行,而是把这些部分缓存成变量,然后逐一地进行处理,然后在你进行的时候把它们建立起来。

    优化例程将在有变量的地方使用寄存器,这样它就不应该影响空间,但是它可以稍微帮助编译器。