Qu'est-ce que BODMAS et pourquoi est-il utile dans la programmation?Que signifie le terme "BODMAS"?
Répondre
http://www.easymaths.com/What_on_earth_is_Bodmas.htm:
Que pensez-vous de la réponse à 2 + 3 x 5 est?
Est-ce (2 + 3) x 5 = 5 x 5 = 25?
ou 2 + (3 x 5) = 2 + 15 = 17?
BODMAS peuvent venir à la rescousse et nous donner des règles à suivre afin que nous ayons toujours la bonne réponse:
(B) raquettes (O) rder (D) IVISION (M) ultiplication (A) ddition (S) ubtraction
Selon BODMAS, la multiplication devrait toujours être faite avant l'addition, donc 17 est réellement la bonne réponse selon BODMAS et sera aussi la réponse que votre calculatrice donnera si vous tapez 2 + 3 x 5.
Pourquoi est-ce utile dans la programmation? Aucune idée, mais je suppose que c'est parce que vous pouvez vous débarrasser de certains crochets? Je suis un programmeur très défensif, donc mes lignes peuvent ressembler à ceci:
result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER;
avec BODMAS vous pouvez faire un peu plus clair:
result = (i + 4 - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
Je pense que je serais toujours utiliser la première variante - plus de parenthèses, mais de cette façon je n'ai pas besoin d'apprendre encore une autre règle et je risque moins de l'oublier et de faire en sorte que ces bizarres soient difficiles à débugger les erreurs?
Juste deviner à cette partie cependant.
Mike Stone EDIT: maths fixe comme Gaius souligne
Pour être honnête, je suis avec votre style "bracketty", plutôt que la version soi-disant optimisée. Peut-être que c'est juste moi, mais je trouve> résultat = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER; plus facile à analyser mentalement ... – ZombieSheep
Une autre version de cette (au collège) était "S'il vous plaît Excusez ma chère tante Sally".
- Parenthèses
- Exponents
- Multiplication Division
- Addition
- Soustraction
Le mnémotechnique utile à l'école, et toujours utile dans la programmation aujourd'hui.
Ordre des opérations dans une expression, telles que:
foo * (bar + baz^2/foo)
- B raquettes premier
- O rdonnances (c.-à-puissances et racines carrées, etc.)
- D IVISION et M ultiplication (de gauche à droite-)
- A ddition et S ubtraction (de gauche à droite)
source: http://www.mathsisfun.com/operation-order-bodmas.html
Lorsque j'ai appris cela à l'école primaire (au Canada), on l'appelait BEDMAS:
B raquettes
E xponents
D IVISION
M ultiplication
A ddition
S ubtraction
Juste pour ceux de cette partie du monde. ..
De même ici en Nouvelle-Zélande. 'Exposants' a plus de sens pour moi que le 'Ordre' génériquement nommé –
Je ne suis pas vraiment sûr de la façon dont la programmation de l'ancien mnémonique BODMAS est applicable. Il n'y a aucune garantie sur l'ordre des opérations entre les langues, et bien que beaucoup gardent les opérations standard dans cet ordre, tous ne le font pas. Et puis il y a des langages où l'ordre des opérations n'est pas vraiment significatif (dialectes Lisp, par exemple). D'une certaine manière, vous feriez probablement mieux de programmer si vous oubliez la commande standard et utilisez des parenthèses pour tout (par exemple (a * b) + c) ou apprenez l'ordre pour chaque langue dans laquelle vous travaillez.
Je n'ai pas le pouvoir d'éditer @Michael Stum's answer, mais ce n'est pas tout à fait correct. Il réduit
(i + 4) - (a + b)
à
(i + 4 - a + b)
Ils ne sont pas équivalents. La meilleure réduction que je peux obtenir pour toute expression est
((i + 4) - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
ou
(i + 4 - a - b) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
J'ai lu quelque part que surtout dans C/C++ diviser vos expressions en petites déclarations était mieux pour l'optimisation; Ainsi, au lieu d'écrire des expressions extrêmement complexes dans une ligne, vous mettez en cache les parties dans des variables et faites chacune d'elles par étapes, puis vous les construisez au fur et à mesure. Les routines d'optimisation utiliseront des registres dans des endroits où vous avez des variables, donc cela ne devrait pas affecter l'espace mais cela peut aider le compilateur.
[Priorité d'opérateur en C et C++] (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence) – foxy
J'utilise généralement un espace blanc pour montrer l'ordre des opérations sur les quatre + -/* opérations, comme ceci: a + b * c Pour tous les autres opérateurs, j'utilise des parenthèses pour rendre l'ordre des opérations clair. –
Je n'ai jamais vu BODMAS avant aujourd'hui. J'ai appris PEMDAS (Parens, Exposants, Multiplication, Division, Addition, Soustraction). – FishBasketGordo