Что означает термин «БОДМАС»? - PullRequest
15 голосов
/ 06 августа 2008

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

Ответы [ 7 ]

20 голосов
/ 06 августа 2008

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

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

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

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

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

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

8 голосов
/ 06 августа 2008

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

  • Скобки
  • Экспоненты
  • Умножение
  • Отдел * * +1010
  • Добавление
  • Вычитание

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

5 голосов
/ 14 августа 2008

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

(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 голосов
/ 06 августа 2008

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

foo * (bar + baz^2 / foo) 
  • B Ракетки сначала
  • O rders (т.е. державы и квадратные корни и т. Д.)
  • D ivision и M ultiplication (слева направо)
  • A Ddition и S Utratraction (слева направо)

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

4 голосов
/ 06 августа 2008

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

B Ракетки
E xponents
D IVISION
M ultiplication
A ddition
S ubtraction

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

1 голос
/ 06 августа 2008

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

0 голосов
/ 22 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...