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

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

Ответов (7)

Решение

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

What do you think the answer to 2 + 3 x 5 is?

Is it (2 + 3) x 5 = 5 x 5 = 25 ?

or 2 + (3 x 5) = 2 + 15 = 17 ?

BODMAS can come to the rescue and give us rules to follow so that we always get the right answer:

(B)rackets (O)rder (D)ivision (M)ultiplication (A)ddition (S)ubtraction

According to BODMAS, multiplication should always be done before addition, therefore 17 is actually the correct answer according to BODMAS and will also be the answer which your calculator will give if you type in 2 + 3 x 5 .

Why it is useful in programming? No idea, but i assume it's because you can get rid of some brackets? I am a quite defensive programmer, so my lines can look like this:

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

with BODMAS you can make this a bit clearer:

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

I think i'd still use the first variant - more brackets, but that way i do not have to learn yet another rule and i run into less risk of forgetting it and causing those weird hard to debug errors?

Just guessing at that part though.

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

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

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

Только для тех, кто из этой части мира ...

У меня нет возможности редактировать ответ @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) 
  • Сначала ракетки B
  • O rders (т.е. Powers и квадратные корни и т.д.)
  • Division and Multiplication (left-to-right)
  • Addition and Subtraction (left-to-right)

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

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

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

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

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

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

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