16

什么是 BODMAS,为什么它在编程中很有用?

4

7 回答 7

20

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 ?

BODMAS 可以出手相救,并为我们提供要遵循的规则,以便我们始终得到正确的答案:

(B)球拍 (O)rder (D)ivision (M)乘法 (A)加法 (S)减法

根据 BODMAS,乘法应始终在加法之前完成,因此 17 实际上是根据 BODMAS 的正确答案,如果您输入 2 + 3 x 5 ,您的计算器也会给出答案。

为什么它在编程中有用?不知道,但我认为这是因为你可以摆脱一些括号?我是一个非常防御性的程序员,所以我的行看起来像这样:

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

使用 BODMAS,您可以更清楚地说明这一点:

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

我想我仍然会使用第一个变体 - 更多的括号,但这样我就不必学习另一个规则,并且我忘记它并导致那些奇怪的难以调试错误的风险更小?

只是猜测那部分。

Mike Stone 编辑:Gaius 指出的固定数学

于 2008-08-06T14:57:01.403 回答
8

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

  • 括弧
  • 指数
  • 乘法
  • 分配
  • 添加
  • 减法

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

于 2008-08-06T15:01:15.827 回答
5

表达式中的运算顺序,例如:

foo * (bar + baz^2 / foo) 
  • B球拍优先
  • 数(即幂和平方根等)
  • 除法和乘法从左到右)
  • 加减法从左到右

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

于 2008-08-06T15:03:35.977 回答
5

我无权编辑@Michael Stum 的答案,但这并不完全正确。他减少

(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;
于 2008-08-14T01:29:42.253 回答
4

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

B球拍指数除法乘法加法减法
_
_
_ _
_

只为来自这个世界的人...

于 2008-08-06T15:11:01.327 回答
1

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

于 2008-08-06T15:12:30.327 回答
0

我在某处读到,尤其是在 C/C++ 中,将表达式拆分为小语句更利于优化;因此,不是在一行中编写非常复杂的表达式,而是将部分缓存到变量中,并逐步执行每个部分,然后在进行过程中构建它们。

优化例程将在您有变量的地方使用寄存器,因此它不应该影响空间,但它可以帮助编译器一点。

于 2008-10-22T10:45:12.950 回答