Что такое BODMAS и почему он полезен при программировании?
Что означает термин "BODMAS"?
Ответ 1
http://www.easymaths.com/What_on_earth_is_Bodmas.htm:
Как вы думаете, ответ на 2 + 3 x 5?
Это (2 + 3) x 5 = 5 x 5 = 25?
или 2 + (3 x 5) = 2 + 15 = 17?
BODMAS может прийти на помощь и дать нам правила следовать, чтобы мы всегда получали правильный ответ:
(B) ракеты (O) rder (D) ivision (M) Умножение (A) ddition (S) ubtraction
В соответствии с 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;
Я думаю, что я все еще буду использовать первый вариант - больше скобок, но я не должен изучать еще одно правило, и я сталкиваюсь с меньшим риском забыть об этом и заставляя этих странных трудно отлаживать ошибки?
Просто гадать на эту часть.
Майк Стоун EDIT: Исправлена математика, как указывает Гай
Ответ 2
Другая версия этого (в средней школе) была "Прошу прощения у моей дорогой тети Салли".
- Скобки
- Экспоненты
- Умножение
- Отдел
- Добавление
- Вычитание
Мнемоническое устройство было полезно в школе и до сих пор полезно в программировании сегодня.
Ответ 3
Порядок операций в выражении, например:
foo * (bar + baz^2 / foo)
- B первые ракетки
- O rders (т.е. полномочия и квадратные корни и т.д.).
- D ivision и M усечение (слева направо)
- A ddition и S ubtraction (слева направо)
источник: http://www.mathsisfun.com/operation-order-bodmas.html
Ответ 4
У меня нет права редактировать @Michael Stum answer, но это не совсем правильно. Он уменьшает
(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
Когда я узнал об этом в старшей школе (в Канаде), он был назван BEDMAS:
B Ракетки
E xponents
D IVISION
M ultiplication
А ddition
S ubtraction
Просто для тех, кто из этой части мира...
Ответ 6
Я не уверен, насколько применимо для программирования старой мнемоники BODMAS. Нет гарантии по порядку операций между языками, и хотя многие из них выполняют стандартные операции в этом порядке, не все это делают. И тогда есть несколько языков, где порядок операций на самом деле не является значимым (диалекты Lisp, например). В некотором смысле вам, вероятно, лучше программировать, если вы забудете стандартный порядок и используете все скобки (например, (a * b) + c) или специально изучите порядок для каждого языка, в котором работаете.
Ответ 7
Я где-то читал, что особенно в C/С++ расщепление ваших выражений на небольшие утверждения было лучше для оптимизации; поэтому вместо того, чтобы писать чрезвычайно сложные выражения в одной строке, вы кешируете части в переменные и делаете каждый по шагам, а затем создавайте их по мере продвижения.
Процедуры оптимизации будут использовать регистры в тех местах, где у вас есть переменные, поэтому они не должны влиять на пространство, но могут немного помочь компилятору.