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

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

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: исправлена ​​математика, как указывает Гай

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

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

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

У меня нет полномочий редактировать ответ @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) 
  • Ракетки в первую очередь
  • Заказчики (то есть державы, квадратные корни и т. Д.)
  • Видение и ультипликация (слева направо)
  • Ddition и Субтракция (слева направо)

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

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

B ракетки
Экспоненты
Видение
Мутипликация
Погружение
Вычитание

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

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

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

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

Другие вопросы по тегам