solved - math worksheets
¿Qué significa el término "BODMAS"? (7)
Cuando aprendí esto en la escuela primaria (en Canadá) se lo conocía como BEDMAS:
B raquetas
E xponentes
D ivisión
M ultiplicación
Una adición
S ubtraction
Solo para aquellos de esta parte del mundo ...
¿Qué es BODMAS y por qué es útil en la programación?
No estoy seguro de qué tan aplicable sea la programación del antiguo mnemónico BODMAS. 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.
Otra versión de esto (en la escuela media) fue "Disculpe, querida tía Sally".
- Paréntesis
- Exponentes
- Multiplicación
- División
- Adición
- Sustracción
El dispositivo mnemónico fue útil en la escuela, y sigue siendo útil en la programación de hoy.
http://www.easymaths.com/What_on_earth_is_Bodmas.htm :
¿Cuál crees que es la respuesta a 2 + 3 x 5?
¿Es (2 + 3) x 5 = 5 x 5 = 25?
o 2 + (3 x 5) = 2 + 15 = 17?
BODMAS puede venir al rescate y darnos reglas a seguir para que siempre obtengamos la respuesta correcta:
(B) raquetas (O) rder (D) ivision (M) ultiplication (A) ddition (S) ubtraction
Según BODMAS, la multiplicación siempre debe hacerse antes de la suma, por lo tanto, 17 es realmente la respuesta correcta de acuerdo con BODMAS y también será la respuesta que dará tu calculadora 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 bastante defensivo, así que mis líneas pueden verse así:
result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER;
con BODMAS puedes aclararlo un poco:
result = (i + 4 - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
Creo que todavía usaría la primera variante, más corchetes, pero de esa manera no tengo que aprender otra regla y corro menos riesgo de olvidarla y causar esos extraños y difíciles errores de depuración.
Solo adivinando esa parte sin embargo.
Mike Stone EDIT: corrigió las matemáticas como señala Gaius
Orden de operaciones en una expresión, como:
foo * (bar + baz^2 / foo)
- B raquetas primero
- O rders (es decir, Powers y Square Roots, etc.)
- D ivisión y M ultiplicación (de izquierda a derecha)
- A ddition y S ubtraction (de izquierda a derecha)
fuente: http://www.mathsisfun.com/operation-order-bodmas.html
Leí en alguna parte que especialmente en C / C ++ dividir tus expresiones en pequeñas declaraciones 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 utilizarán registros en lugares donde haya variables, por lo que no deberían afectar el espacio, pero pueden ayudar un poco al compilador.
No tengo el poder para editar la respuesta de @Michael Stum , pero no es del todo correcto. Él reduce
(i + 4) - (a + b)
a
(i + 4 - a + b)
Ellos no son equivalentes. La mejor reducción que puedo obtener 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;