Вопрос

Что такое BODMAS и почему он полезен в программировании?

Это было полезно?

Решение

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 ?

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

(B) ракетки (O), мяч (D), видение (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;

Я думаю, я бы все равно использовал первый вариант - больше скобок, но таким образом мне не нужно изучать еще одно правило, и я подвергаюсь меньшему риску забыть его и вызвать эти странные трудно отлаживаемые ошибки?

Хотя я просто догадываюсь об этой части.

Майк Стоун ПРАВИТЬ:Исправлена математика, как указывает Гай

Другие советы

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

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

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

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

foo * (bar + baz^2 / foo) 
  • Bсначала ракетки
  • Oкоэффициенты (то есть Степени, квадратные корни и т.д.)
  • Divвидение и Mумножение (слева направо)
  • Aусловие и Sсокращение (слева направо)

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

У меня нет сил редактировать Ответ Майкла Стама, но это не совсем корректно.Он уменьшает

(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;

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

Bракетки
Eкомпоненты
Divвидение
Mумножение
Aусловие
Sудаление

Только для тех, кто живет в этой части света...

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top