Что означает термин «БОДМАС»?

Что такое БОДМАС и почему он полезен в программировании?

16 math
6.08.2008 14:54:52
Я обычно использую пробел, чтобы показать порядок операций с четырьмя операциями + - / *, например: a + b * c Для всех других операторов я использую скобки, чтобы сделать порядок операций понятным.
Jeremy Ruten 15.08.2008 00:02:11
Я никогда не видел БОДМАС до сегодняшнего дня. Я изучил PEMDAS (Парены, Экспоненты, Умножение, Деление, Сложение, Вычитание).
FishBasketGordo 21.05.2012 18:05:55
7 ОТВЕТОВ
РЕШЕНИЕ

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

Как вы думаете, ответ на 2 + 3 х 5?

Это (2 + 3) х 5 = 5 х 5 = 25?

или 2 + (3 х 5) = 2 + 15 = 17?

BODMAS может прийти на помощь и дать нам правила, которым мы должны следовать, чтобы мы всегда получали правильный ответ:

(B) ракетки (O) RERDER (D) Ivision (M) ультипликация (A) Ddition (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 EDIT: исправлена ​​математика, как указывает Гай

20
14.08.2008 23:18:34
Если честно, я придерживаюсь вашего стиля "брекет", а не якобы оптимизированной версии. Может быть, это только я, но я нахожу> результат = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER; легче разобрать мысленно ...
ZombieSheep 6.08.2008 15:01:41

Другая версия этого (в средней школе) была «Пожалуйста, извините мою дорогую тетю Салли».

  • Круглые скобки
  • Экспоненты
  • умножение
  • разделение
  • прибавление
  • Вычитание

Мнемоническое устройство было полезно в школе, и все еще полезно в программировании сегодня.

8
6.08.2008 15:01:15

Порядок операций в выражении, например:

foo * (bar + baz^2 / foo) 
  • В Ракетки первый
  • O rders (т.е. Powers и квадратные корни и т.д.)
  • D IVISION и М ultiplication (слева направо)
  • Ddition и S ubtraction (слева направо)

источник: http://www.mathsisfun.com/operation-order-bodmas.html

5
29.08.2008 20:15:47

Когда я узнал об этом в начальной школе (в Канаде), это называлось BEDMAS:

В Ракетки
Е xponents
Д IVISION
М ultiplication ddition S ubtraction

Просто для тех, кто из этой части света ...

4
6.08.2008 15:11:01
Точно так же здесь, в Новой Зеландии. «Экспоненты» имеют больше смысла для меня, чем общепринятое название «Орден»
Orion Edwards 14.08.2008 23:37:32

Я не совсем уверен, насколько применимо к программированию старая мнемоника BODMAS. Нет никакой гарантии порядка операций между языками, и хотя многие держат стандартные операции в таком порядке, не все делают. Кроме того, есть некоторые языки, в которых порядок операций не так уж и значим (например, диалекты Лисп). В некотором смысле, вам, вероятно, лучше программировать, если вы забудете стандартный порядок и либо используете скобки для всего (например, (a * b) + c), либо специально изучите порядок для каждого языка, на котором вы работаете.

1
6.08.2008 15:12:30

У меня нет полномочий редактировать ответ @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;
5
23.05.2017 12:32:35

Я где-то читал, что особенно в C / C ++ разбиение ваших выражений на маленькие операторы было лучше для оптимизации; поэтому вместо того, чтобы писать чрезвычайно сложные выражения в одну строку, вы кешируете части в переменные и выполняете каждое из них по шагам, а затем собираете их по мере продвижения.

Процедуры оптимизации будут использовать регистры в местах, где у вас были переменные, поэтому это не должно влиять на пространство, но может немного помочь компилятору.

0
22.10.2008 10:45:12