¿Qué es BODMAS y por qué es útil en la programación?¿Qué significa el término "BODMAS"?
Respuesta
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
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
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.
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
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. ..
También aquí en Nueva Zelanda. 'Exponentes' tiene más sentido para mí que el genéricamente llamado 'Orden' –
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.
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;
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.
- 1. ¿Qué significa el término "Verilog Synthesis"?
- 2. Heredoc: ¿qué significa realmente el término 'EOT'?
- 3. ¿Qué significa el término "restringido" en java?
- 4. ¿Qué significa el término "léxico" en C++?
- 5. ¿Qué significa el término base de datos heredada?
- 6. ¿Qué significa exactamente el término antiguo objeto Java plano (POJO)?
- 7. ¿Qué significa el término "bloqueo" en la programación?
- 8. Principio BODMAS en .NET
- 9. Lo que significa el término orientación de objeto "verdadero"
- 10. ¿Qué significa "ruptura BC" significa?
- 11. ¿Qué significa el término "tipo opaco" en el contexto de "tipo opaco CFBundleRef"?
- 12. ¿Qué significa el término "Tuple" en las bases de datos relacionales?
- 13. ¿Qué significa el término "forma canónica" o "representación canónica" en Java?
- 14. ¿Qué significa el término "vendedor" o "vendedor" para Ruby on Rails?
- 15. ¿Qué se entiende por el término "Instrumentación"?
- 16. ¿Qué idioma acuñó el término lvalue?
- 17. ¿Qué se entiende por el término "objeto sucio"?
- 18. ¿Qué significa 'siembra'?
- 19. ¿Qué significa "interpolación lineal"?
- 20. ¿Qué significa "log *"?
- 21. ¿Qué significa el parcial?
- 22. ¿Qué significa el DTMobileIS?
- 23. ¿Qué es un PDI y qué significa?
- 24. ¿Qué significa nivel de API?
- 25. ¿Qué significa Field.Index.NOT_ANALYZED_NO_NORMS significa
- 26. ¿Qué significa ('../') significa?
- 27. ¿Qué significa SCM?
- 28. ¿Qué significa "babosa" significa
- 29. ¿Qué significa exportar un símbolo?
- 30. Definición precisa del término 'marshalling'
[Preferencia del operador en C y C++] (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence) – foxy
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. –
Nunca había visto BODMAS antes de hoy. Aprendí PEMDAS (Parens, Exponentes, Multiplicación, División, Suma, Resta). – FishBasketGordo