[英]What does the term "BODMAS" mean?
什么是 BODMAS,为什么它在编程中很有用?
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 指出的固定数学
另一个版本(在中学)是“请原谅我亲爱的莎莉阿姨”。
助记器在学校很有用,在今天的编程中仍然有用。
我无权编辑@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;
表达式中的运算顺序,例如:
foo * (bar + baz^2 / foo)
当我在小学(在加拿大)学到这一点时,它被称为 BEDMAS:
B球拍
指数
事业部
乘法
加法
减法
只为来自这个世界的人...
无论如何,我不确定如何适用于编程旧的 BODMAS 助记符。 语言之间的操作顺序无法保证,虽然许多语言保持标准操作的顺序,但并非所有人都这样做。 还有一些语言的操作顺序并不是那么有意义(例如 Lisp 方言)。 在某种程度上,如果您忘记标准顺序并且对所有内容使用括号(例如(a * b)+ c)或专门学习您所使用的每种语言的顺序,您可能会更好地进行编程。
我在某处读到,尤其是在 C/C++ 中,将表达式拆分为小语句更利于优化; 因此,不是在一行中编写非常复杂的表达式,而是将部分缓存到变量中,并逐步执行每个部分,然后在进行过程中构建它们。
优化例程将在您有变量的地方使用寄存器,因此它不应该影响空间,但它可以帮助编译器一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.