Pergunta

O que é BODMAS e por que é útil na programação?

Foi útil?

Solução

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

Qual você acha que é a resposta para 2 + 3 x 5?

É (2 + 3) x 5 = 5 x 5 = 25?

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

BODMAS pode vir em nosso socorro e nos dar regras a seguir para que sempre obtenhamos a resposta certa:

(B)raquetes (O)ordem (D)ivisão (M)ultiplicação (A)adição (S)subtração

De acordo com o BODMAS, a multiplicação deve ser sempre feita antes da adição, portanto 17 é na verdade a resposta correta de acordo com o BODMAS e também será a resposta que sua calculadora dará se você digitar 2 + 3 x 5.

Por que é útil na programação?Não faço ideia, mas presumo que seja porque você pode se livrar de alguns colchetes.Sou um programador bastante defensivo, então minhas falas podem ser assim:

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

com BODMAS você pode deixar isso um pouco mais claro:

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

Acho que ainda usaria a primeira variante - mais colchetes, mas assim não preciso aprender mais uma regra e corro menos risco de esquecê-la e causar aqueles erros estranhos e difíceis de depurar?

Só estou adivinhando essa parte.

Mike Stone EDITAR:Matemática corrigida como Gaius aponta

Outras dicas

Outra versão disso (no ensino médio) era "Por favor, desculpe minha querida tia Sally".

  • Parênteses
  • Expoentes
  • Multiplicação
  • Divisão
  • Adição
  • Subtração

O dispositivo mnemônico foi útil na escola e ainda hoje é útil na programação.

Ordem das operações em uma expressão, como:

foo * (bar + baz^2 / foo) 
  • Braquetes primeiro
  • Óordens (ou seja, potências e raízes quadradas, etc.)
  • Divisão e Mmultiplicação (da esquerda para a direita)
  • Aadição e Ssubtração (da esquerda para a direita)

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

Eu não tenho o poder de editar Resposta de @Michael Stum, mas não está totalmente correto.Ele reduz

(i + 4) - (a + b)

para

(i + 4 - a + b)

Eles não são equivalentes.A melhor redução que posso obter para toda a expressão é

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

ou

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

Quando aprendi isso na escola primária (no Canadá), era conhecido como BEDMAS:

Braquetes
Expoentes
Divisão
Mmultiplicação
Aadição
Ssubtração

Só para quem é desta parte do mundo...

De qualquer forma, não tenho certeza de quão aplicável à programação do antigo mnemônico BODMAS.Não há garantia sobre a ordem das operações entre idiomas e, embora muitos mantenham as operações padrão nessa ordem, nem todos o fazem.E há algumas linguagens em que a ordem das operações não é tão significativa (dialetos Lisp, por exemplo).De certa forma, você provavelmente estará melhor programando se esquecer a ordem padrão e usar parênteses para tudo (por exemplo, (a*b) + c) ou aprender especificamente a ordem para cada linguagem em que trabalha.

Li em algum lugar que, especialmente em C/C++, dividir suas expressões em pequenas instruções era melhor para otimização;então, em vez de escrever expressões extremamente complexas em uma linha, você armazena as partes em variáveis ​​e faz cada uma delas em etapas, depois as constrói à medida que avança.

As rotinas de otimização usarão registros em locais onde você tinha variáveis, então não deve impactar o espaço, mas pode ajudar um pouco o compilador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top