Что означает термин "БОДМАС"?
Что такое БОДМАС и почему он полезен в программировании?
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++ разбиение ваших выражений на маленькие операторы было лучше для оптимизации; поэтому вместо того, чтобы писать чрезвычайно сложные выражения в одну строку, вы кешируете части в переменные и выполняете каждое из них по шагам, а затем собираете их по мере продвижения.
Процедуры оптимизации будут использовать регистры в тех местах, где у вас были переменные, поэтому это не должно влиять на пространство, но может немного помочь компилятору.