2008-08-06 27 views
16

¿Qué es BODMAS y por qué es útil en la programación?¿Qué significa el término "BODMAS"?

+0

[Preferencia del operador en C y C++] (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence) – foxy

+0

Suelo utilizar espacios en blanco para mostrar el orden de las operaciones en los cuatro + -/* operaciones, como esta: a + b * c Para todos los demás operadores, uso paréntesis para borrar el orden de las operaciones. –

+0

Nunca había visto BODMAS antes de hoy. Aprendí PEMDAS (Parens, Exponentes, Multiplicación, División, Suma, Resta). – FishBasketGordo

Respuesta

21

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

¿Qué le parece la respuesta a 2 + 3 x 5 es?

¿Es (2 + 3) x 5 = 5 x 5 = 25?

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

BODMAS pueden venir al rescate y nos dan reglas a seguir para que siempre nos dan la respuesta correcta:

(B) raquetas (O) rder (D) iVision (M) ultiplication (A) ddition (S) ubtraction

De acuerdo con BODMAS, la multiplicación siempre debe hacerse antes de la suma, por lo tanto 17 es realmente la respuesta correcta según BODMAS y también será la respuesta que tu calculadora dará si escribes 2 + 3 x 5.

¿Por qué es útil en la programación? No tengo idea, pero supongo que es porque puedes deshacerte de algunos corchetes. Soy un programador a la defensiva, por lo que mis líneas puedo tener este aspecto:

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

con BODMAS se puede hacer esto un poco más claro:

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

Creo que todavía haría uso de la primera variante - más corchetes, pero de esa manera no tengo que aprender otra regla y corro menos riesgo de olvidarlo y causar esos extraños y difíciles errores de depuración?

Sin embargo, adivinando esa parte.

Mike Stone EDIT: matemáticas fija como Gayo señala

+1

Para ser honesto, estoy con su estilo "bracketty", en lugar de la versión supuestamente optimizada. Quizás soy solo yo, pero encuentro> result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER; más fácil de analizar mentalmente ... – ZombieSheep

8

Otra versión de este (en la secundaria) fue "Por favor, disculpe mi estimada tía Sally".

  • Paréntesis
  • exponentes
  • Multiplicación
  • División
  • adición
  • Resta

El recurso mnemotécnico era útil en la escuela, y sigue siendo útil en la programación de hoy.

5

Orden de las operaciones en una expresión, tales como:

foo * (bar + baz^2/foo) 
  • B raquetas primera
  • O rders (es decir, potencias y raíces cuadradas, etc.)
  • D iVision y M ultiplication (de izquierda a derecha)
  • A ddition y S ubtraction (de izquierda a derecha)

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

4

Cuando aprendí esto en la escuela primaria (en Canadá) se conocía como BEDMAS:

B raquetas
E xponents
D iVision
M ultiplication
Un ddition
S ubtraction

Sólo por los de esta parte del mundo. ..

+0

También aquí en Nueva Zelanda. 'Exponentes' tiene más sentido para mí que el genéricamente llamado 'Orden' –

1

No estoy seguro de qué tan aplicable a la programación de la antigua mnemotécnica BODMAS es de todos modos. No hay garantía en el orden de las operaciones entre idiomas, y aunque muchos mantienen las operaciones estándar en ese orden, no todos lo hacen. Y luego hay algunos idiomas donde el orden de las operaciones no es tan significativo (dialectos Lisp, por ejemplo). En cierto modo, probablemente sea mejor para la programación si olvida el orden estándar y usa paréntesis para todo (por ejemplo, (a * b) + c) o específicamente aprende el orden para cada idioma en el que trabaja.

5

No tengo el poder de editar @Michael Stum's answer, pero no es del todo correcto. Se reduce

(i + 4) - (a + b) 

a

(i + 4 - a + b) 

No son equivalentes. La mejor manera de reducir puedo conseguir para toda la expresión es

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

o

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

leí en alguna parte que sobre todo en C/C++ dividir sus expresiones en los estados pequeños era mejor para la optimización; así que en lugar de escribir expresiones enormemente complejas en una línea, almacenas las partes en caché en variables y haces cada una de ellas en pasos, y luego las creas a medida que avanzas.

Las rutinas de optimización usarán registros en lugares donde haya variables, por lo que no deberían afectar el espacio, pero pueden ayudar un poco al compilador.

Cuestiones relacionadas