Подтвердить что ты не робот

Что означает термин "BODMAS"?

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

4b9b3361

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

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