Por que = -x ^ 2 + x para x = 3 no Excel resulta em 12 em vez de -6?

96

Suponha que minha célula A1 em uma planilha do Excel contenha o número 3 . Se eu inserir a fórmula

= - A1^2 + A1

em A2, A2 mostra o número 12, quando deve mostrar -6 (ou -9 + 3)

Por que é que? Como posso evitar esse comportamento enganoso?

Rodolfo Oviedo
fonte
19
Um número negativo ao quadrado é um número positivo. O que tornaria a fórmula 9 + 3. - (A1) ^ 2 daria a você -6.
Ramhound
68
Os poderes do @ Ramhound têm prioridade mais alta que os sinais de menos em qualquer ambiente são.
18718 Ninguém
17
Deveria ser - (A1 ^ 2) obter -6 ... você precisa de parênteses ao redor da operação, não apenas o número. O Excel é bom para matemática, mas você precisa respeitar a ordem das operações e, em caso de dúvida, use parênteses!
SnakeDoc
13
Isso é tudo sobre ordem de operações e nada a ver com o Excel.
YetAnotherRandomUser
11
Para todos os comentadores que criticam as habilidades matemáticas dos OPs: Na matemática pura padrão, isso deve ser inequivocamente avaliado como -6. Em particular, entende-se que o negativo sempre significa 0-x (como indicado na resposta). A introdução de um unário - é um tópico novo em ciência da computação aplicada, e quase sempre apenas um detalhe de implementação. Criticar o OP por não entender isso é como responder a uma pergunta sobre confusão com relação a erros de ponto flutuante com "o programa está bom. Você só precisa verificar sua matemática. Veja, se você escrever esses números em binário, então ..."
DreamConspiracy

Respostas:

136

Resposta curta

Para resolver esse problema, basta adicionar um 0 antes do sinal de igual

= 0 - A1^2 + A1

ou adicione alguns parênteses para forçar a ordem padrão de operações

= - (A1^2) + A1

ou substitua o sinal de menos por sua interpretação comum da multiplicação por -1

= -1 * A1^2 + A1

Nesse caso específico, onde você tem o termo extra + A1, a melhor solução é a proposta por @ lioness99a:

= A1 - A1^2

Explicação detalhada

Sob as convenções do Excel,

= - 3^2

é igual a (-3) ^ 2 = 9, enquanto

= 0-3^2

é igual a 0-9 = -9.

Por que adicionar apenas 0 altera o resultado?

Não precedido por um minuendo, o sinal de menos em -3 ^ 2 é considerado um operador de negação , que é um operador unário (com apenas um argumento) que altera o sinal do número (ou expressão) a seguir. No entanto, o sinal de menos em 0-3 ^ 2 é um operador de subtração , que é um operador binário que subtrai o que segue -do que precede -. De acordo com as convenções do Excel, o operador de exponenciação ^ é calculado após o operador de negação e antes do operador de subtração . Consulte "Operadores de cálculo e precedência no Excel" , seção "A ordem na qual o Excel executa operações em fórmulas".

A convenção matemática padrão é que a exponenciação é computada antes da negação e subtração ou, mais simplesmente, ^é computada antes -. Vergonhosamente, o Excel escolheu convenções diferentes das regras de álgebra, livros escolares, redação acadêmica, calculadoras científicas, Lotus 1-2-3, Mathematica, Maple, linguagens orientadas a computação como Fortran ou Matlab, MS Works e ... VBA (the linguagem usada para escrever macros do Excel). Infelizmente, o Calc do LibreOffice e o Google Sheets seguem a mesma convenção para compatibilidade com o Excel. No entanto, colocar uma expressão na caixa ou barra de pesquisa do Google fornece excelentes resultados. Se você pressionar enter, a ordem dos cálculos será dada usando parênteses. Uma discussão em que um matemático mata os argumentos de um "cientista da computação" defendendo a precedência da negação sobre a exponenciação: http://mathforum.org/library/drmath/view/69058.html

Soluções alternativas gerais

Se você deseja calcular

- Anything ^ 2,

adicione um 0 antes do sinal de igual

0 - Anything ^ 2

ou adicione alguns parênteses para forçar a ordem padrão de operações

- ( Anything ^ 2 )

ou substitua o sinal de menos por sua interpretação comum da multiplicação por -1

-1 * Anything ^ 2

Das alternativas acima, prefiro adicionar um 0 antes do sinal de menos, porque é o mais prático. Se a expressão já estiver entre parênteses, evito adicionar parênteses. O uso intenso de parênteses torna as expressões mais difíceis de ler, depurar e gravar.

Se um termo extra for adicionado (ou subtraído sem o problema de energia uniforme),

- Anything ^ 2 + ExtraTerm,

a melhor solução é colocar o ExtraTerm em primeiro lugar,

ExtraTerm - Anything ^ 2.

Um comentário para outra resposta diz que o único caso em que você deve estar ciente da regra de precedência não padrão é quando um sinal de menos segue um sinal de igual (= -). No entanto, existem outros exemplos, como = exp (-x ^ 2) ou = (- 2 ^ 2 = 2 ^ 2), em que não há um minuendo antes do sinal de menos.

Agradeço a @BruceWayne por propor uma resposta curta, que escrevi no começo.

Você pode estar interessado em De acordo com o Excel, 4 ^ 3 ^ 2 = (4 ^ 3) ^ 2. Essa é realmente a convenção matemática padrão?

Rodolfo Oviedo
fonte
1
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
DavidPostill
Por favor, veja acima. Todos os comentários serão excluídos se não fizerem parte da discussão no chat.
DavidPostill
20

Um pouco mais sucinto que a resposta de Rodolfo, você pode usar:

=-(A1^2)+(A1)

(Edit: eu totalmente não vi que era uma pergunta / resposta própria.)

Bruce Wayne
fonte
1
Exatamente! Dependendo das regras de precedência de qualquer idioma ou aplicativo, o que você acha que deveria ser é uma receita para problemas.
Jamesqf
2
@ jamesqf, mas deve haver algum sentido e limites para isso. Ninguém escreve 2+ (3 * 4). Se uma linguagem possui operações aritméticas e quaisquer regras de precedência, deve absolutamente suportar todas as convenções matemáticas padrão. Não há desculpa para esse erro no Excel.
Zeus
4
@ Zeus: Ninguém? Provavelmente, especialmente se estivesse em uma expressão mais complicada ou em uma condição if. É claro que eu escreveria 3 * 4 + 2, mesmo que estivesse deixando de fora os parênteses.
jamesqf
3
Há muito tempo suspeitava que esse hábito de parênteses exagerasse provém da superexposição (tão predominante) a C (e seus descendentes sintáticos). Mas C não é, de modo algum, um bom exemplo de seguir corretamente as regras matemáticas, incluindo precedência (além de ter problemas com macros). Por outro lado, pessoas com exposição inicial a mais sistemas / idiomas acadêmicos esperam fortemente o design correto e não tendem a fazer concessões antecipadas 'apenas por precaução'. Daí surpresas genuínas, como no OP.
Zeus
14

Uma liderança -é considerada parte do primeiro mandato.

=-3^2 é processado como (-3)^2 = 9

Com um zero no início, ele é tratado como subtração normal.

=0-3^2 é processado como 0 - 3^2 = -9

E se você tiver dois operadores, o mesmo acontecerá.

=0--3^2é processado como 0 - (-3)^2 = -9e =0+-3^2é processado como0 + (-3)^2 = 9

caçador
fonte
4

Como o Excel está interpretando sua equação como:

(-x) ^ 2 + x

Quando você quisesse:

- (x ^ 2) + x

Para evitar esse tipo de comportamento indesejado, acho que a melhor prática é fazer uso pesado de parênteses para definir seu próprio sistema de prioridade, pois negação não é a mesma que subtração e, portanto, não é coberta pelo PEMDAS. Um exemplo seria como:

(- (x ^ 2)) + x

Pode ser um exagero, mas é assim que garanto que o Excel se comporta da maneira que eu quero.

routhken
fonte
4
“Como o PEMDAS não é garantido no Excel” - Não, é absolutamente garantido no Excel. Qualquer outra coisa seria loucura. Se a negação unária (ou seja, distinta da subtração!) Tem precedência sobre a exponenciação não é coberta pelo PEMDAS.
Konrad Rudolph
1
@routhken O uso intenso de parênteses torna a escrita, a edição e a depuração complicadas. Para facilitar essas tarefas, verifico a precedência dos operadores no software com o qual estou trabalhando e uso apenas os parênteses necessários. Além disso, adiciono espaços para melhorar a legibilidade.
Rodolfo Oviedo
@KonradRudolph Editei minha resposta, obrigado pelo esclarecimento.
routhken
1
Eu preferiria usar x - x^2. Isso garante que o - seja interpretado como o operador de subtração binária.
Xalorous
@KonradRudolph Acho que a maneira de ver isso é que planilhas e linguagens de programação de computadores usam PUEMDAS, onde operações unárias são avaliadas após operações entre parênteses, mas antes de operações matemáticas binárias.
Xalorous
3

A expressão = - A1^2 + A1é específica para o Excel, portanto, deve seguir as regras do Excel. Ao contrário de outras respostas aqui, não há uma ordem correta de precedência. Existem apenas convenções diferentes adotadas por diferentes aplicativos. Para sua referência, a ordem de precedência usada pelo excel é:

:       Range
<space> intersection
,       union
-       Negation
%       Percentage
^       Exponential
* and / Multiplication and Division
+ and - Addition and Subtraction
&       Concatenation
= < > <= >= <>  Comparison

Que você pode substituir usando parênteses.

Paul Smith
fonte
9
Obviamente, o Excel poderia ter escolhido + para significar multiplicação e * para subtração etc., e qualquer pessoa que precisasse usar o Excel precisaria saber disso. Mas teria sido errado. O caso em questão não é o mesmo nível de errado (ou bobo), mas você definitivamente pode argumentar que o Excel definido errou as prioridades.
Mormegil
4
@Megegil Bem dito! Depois de tentar = 1 + 2 * 2 e ver que a resposta é 5 e não 6., você assume que o Excel segue as regras da álgebra. Qual é o sentido de enganar as pessoas?
Rodolfo Oviedo
Existe uma ordem correta de precedência, mas os computadores têm operações adicionais. O problema aqui é que os computadores usam '-' para negação E para subtração, onde a pessoa que faz álgebra escrita vê discriminação entre negação e subtração. Para o computador perceber a diferença, ele precisa de um conjunto de regras. Em '-x', o '-' é um operador unário (atua em um operando). Em '1-x', o '-' é um operador binário. Portanto, o Excel (e outro software de computador) converte -x ^ 2 em (-x) ^ 2. O restante da ordem de precedência ainda se aplica, como todos aprendemos na escola primária.
Xalorous
3
@Xalorous: Sim, -pode ser unário ou binário. Mas isso não implica uma ordem de operações. Outras linguagens acertam: em Python, Ruby, Octave, Awk e Haskell (as cinco primeiras linguagens com um operador de exponenciação que veio à mente), -3 ** 2sempre avalia -9. Por quê? Porque essa é a resposta correta.
wchargin
1
@Xalorous a pessoa que faz álgebra escrita usa as convenções de seu público combinadas com parênteses para reduzir a ambiguidade. Não existe uma ordem correta de precedência, e as regras da álgebra são na verdade apenas convenções.
Paul Smith
3

Você pode tê-lo de qualquer maneira:

=-A1^2+A1

retornará um 12 , mas:

=0-A1^2+A1

retornará um -6

Se você acha que retornar 12 viola o bom senso; esteja ciente de que o Planilhas Google faz a mesma coisa.

Aluno de Gary
fonte
1
Parece que o sinal de menos unário tem precedência "muito alta".
Andreas Rejbrand
@AndreasRejbrand Parece ser unitário somente se seguir diretamente o sinal = ............... =A1-A1^2também retorna -6
Gary's Student
2
Mas no exemplo A1 - A1 ^ 2, o sinal de menos é obviamente binário. (Um operador unário é aquele que aceita um único operando (como o sinal de menos unário em -5 ou o fatorial, o sinal não etc.); um operador binário é aquele que aceita dois operandos (como binário mais, menos, multiplicação, união, etc.).) Observe que o sinal de menos pode ser unário, mesmo que não siga imediatamente após o sinal de igual: 5 + (-4 + 3).
Andreas Rejbrand
@AndreasRejbrand Concordo plenamente com você!
Gary Student
Apenas para defender a reputação do Google, tente a caixa ou barra de pesquisa para inserir expressões matemáticas. Você obterá muitos resultados consistentes com a boa matemática, ainda melhor que no Matlab ou no Octave, por exemplo, tente 2 ^ 1 ^ 2.
Rodolfo Oviedo
3

Como alternativa, você poderia simplesmente fazer

= A1 - A1^2

Porque -y + x = x-y

lioness99a
fonte
Isso não explica por que isso deve funcionar e duplica inúmeras respostas anteriores.
fixer1234
@ fixer1234 Literalmente ninguém mais disse isso, e eu dei a razão matemática para isso?
Leo9999
1. Muitas respostas descrevem transformar isso em uma subtração explícita. 2. Essa não é a razão matemática. A questão é por que o Excel não se comporta dessa maneira. A resposta é que o negativo não é tratado como subtração pelo Excel.
fixer1234
Eles perguntaram como impedir o comportamento. Eu mostrei a eles a maneira mais simples. E nem uma única resposta afirma o que eu tenho ... #
lioness99a
A melhor solução. Eu adicionei à minha resposta com o devido crédito. Se você gostou da pergunta, faça um voto positivo.
Rodolfo Oviedo
2

Outras pessoas responderam "como posso evitar isso?" parte da pergunta. Eu vou lhe dizer por que isso acontece.

Isso acontece porque os computadores pessoais em 1979 tinham capacidade de processamento e memória muito limitada.

O VisiCalc foi introduzido para o Apple II em 1979, dois anos antes do lançamento inicial do PC IBM (no qual a maioria dos computadores desktop e laptop modernos traçam sua ancestralidade direta). O Apple II pode ser adquirido com até 64 KiB (65.536 bytes) de RAM, e o VisiCalc exigia pelo menos 32 KiB para ser executado. Como um pouco de lado aqui, o VisiCalc é amplamente considerado o "aplicativo matador" para o Apple II, e talvez de fato para microcomputadores pessoais em geral.

Quanto menos casos especiais e menos previsão da fórmula forem necessários, mais simples (e consequentemente menor) o código para analisar uma fórmula de planilha pode ser feito. Portanto, faria sentido exigir que o usuário fosse um pouco mais explícito em casos extremos, em troca de poder manipular planilhas maiores. Lembre-se, mesmo com um Apple II de ponta, você tinha apenas algumas dezenas de kilobytes para jogar depois que a memória exigida pelo aplicativo era contabilizada. Com um sistema com pouca memória (48 KiB de RAM não era uma configuração incomum para uma máquina "séria"), o limite era ainda mais baixo.

Quando a IBM introduziu seu PC, foi criada uma porta do VisiCalc para a nova arquitetura. A Wikipedia refere-se a essa porta como "compatível com bug" , portanto, você esperaria ver exatamente a mesma fórmula ao analisar o comportamento, mesmo se o sistema tecnicamente fosse capaz de analisar de forma mais complexa.

A partir de 1982, a Microsoft competiu com o VisiCalc e, posteriormente, com o 1-2-3, com sua planilha de plataforma cruzada Multiplan . Posteriormente, o Lotus 1-2-3 foi introduzido em 1983 especificamente para o IBM PC e rapidamente ultrapassou o VisiCalc. Para facilitar a transição, fazia sentido analisar as fórmulas da mesma maneira que o VisiCalc. Portanto, o limitado comportamento de antecipação seria levado adiante.

Em 1985, a Microsoft introduziu o Excel , originalmente para Macintosh e começando com a versão 2 em 1987 para o PC. Novamente, para facilitar a transição, fazia sentido levar adiante a fórmula de analisar o comportamento com o qual as pessoas já estavam acostumadas desde quase uma década.

A cada atualização do Excel, existia a oportunidade de alterar o comportamento, além de exigir que os usuários aprendessem uma nova maneira de digitar fórmulas, além de arriscar quebrar a compatibilidade com planilhas usadas ou criadas com a versão anterior. Em um mercado ainda muito competitivo, com várias empresas comerciais competindo entre si em cada campo, provavelmente foi tomada a decisão de manter o comportamento que os usuários estavam acostumados.

Avanço rápido para 2019, e ainda estamos presos às decisões de comportamento de análise de fórmulas originalmente tomadas até 1978-1979.

um CVn
fonte
mathforum.org/library/drmath/view/69058.html e macnauchtan.com/pub/precedence.html#_Aworks relatam que o Lotus 1-2-3 segue convenções algébricas comuns.
Rodolfo Oviedo
0

A expressão - A1^2contém dois operadores, a saber, o operador de negação unário -e o operador de exponenciação binária ^. Com a ausência de parênteses, pode haver duas interpretações. Ou:

-(A1^2)

ou:

(-A1)^2

O primeiro diz primeiro fazer a exponenciação com operandos A1e 2, em seguida, negar isso.

O segundo diz primeiro faça a negação no operando A1e depois use exponenciação no resultado disso e 2.

Como foi dito nos comentários à pergunta, os poderes têm maior prioridade do que sinais negativos em qualquer ambiente são. O que significa que é melhor que um sistema assuma o primeiro.

No entanto, o Excel prefere o segundo.

A lição é que, se você não tiver certeza se o seu ambiente é saudável ou não, inclua o parêntese no lado seguro. Então escreva -(A1^2).

Jeppe Stig Nielsen
fonte
Isso duplica a resposta aceita e outras respostas anteriores.
fixer1234
-1

Este não é um problema com o Excel, mas com expoentes e negativos. Quando você pega um número e aumenta para uma potência uniforme, você cancela o sinal negativo.

-x^2 + x == (-x * -x) + x 
x = 3  => (-3 * -3) + 3
       ==  9 + 3 => 12

Você precisa usar parênteses e múltiplos por -1

-1 * (x^2) + x
nitrodmr
fonte
10
Não é assim que os sinais funcionam. Deve ser: x = 3 => - (3 * 3) + 3 = 6. O Excel simplesmente não usa a convenção algébrica padrão.
henning
3
@henning Como mencionado em outro comentário, embora essa não seja a convenção “padrão”, é uma convenção, embora não seja a mais comum. Dizer que "não é assim que os sinais funcionam" é, portanto, bastante incorreto. Pelo contrário, não é assim que os sinais funcionam no uso predominante.
Konrad Rudolph
2
@KonradRudolph Fair suficiente. Admito, só estou ciente do uso predominante, que, acredito, é o que causou confusão no OP.
henning
6
Não, absolutamente é um problema com o Excel. O Excel usa as regras incorretas para precedência do operador.
Dawood ibn Kareem
Observe a diferença entre -x^2onde x é 3 e x^2onde x é -3. -x^2+xnunca chegará a 12: wolframalpha.com/input/?i=-x%5E2%2Bx
Thomas Weller
-2

-x ^ 2 + x onde x = 3 Este é um exemplo de equação quadrática A equação pode ser escrita assim: -3 * -3 + 3: A multiplicação tem precedência sobre a adição, então o resultado será escrito da seguinte forma: 9 + 3 : Por que = 9 porque um número negativo xa número negativo fornece um resultado positivo. Isso pode ser verificado usando qualquer calculadora, regra de slides ou qualquer programa de matemática para computadores Resultado final 9 + 3 = 12

Cripple2Cripple
fonte
-3

É apenas uma matemática realmente simples.

Regra 1. Mesmo multiplicações de números negativos, produziriam um resultado positivo:

menos * menos = mais

menos * menos * menos = menos

menos * menos * menos * menos = mais

Isso se deve ao fato de que menos se cancelam em pares.

Regra 2. O poder de cada número identifica que esse número será multiplicado por si próprio várias vezes.

(2) ^ n, onde n = 2 => 2 * 2 = 4

(-2) ^ n, onde n = 2 => (-2) * (- 2) = 4

E se você pode ver a regra número 1 ..

(-3) ^ n, onde n = 3 => (-3) * (-3) * (-3) = 9 * (-3) = -27

Regra 3. Multiplicação e Divisão têm prioridade mais alta que adição e subtração.

3 * 5 + 2 = 15 + 2 = 17

3 * (5 + 2) = 3 * 7 = 21

E há a resposta da sua pergunta:

Combinando as três regras anteriores:

Qual é o valor de x na equação x + 2 = 0?

Meu conselho é que você gaste algum tempo todo ano e continue atualizando as regras fundamentais da matemática.

Na verdade, é uma habilidade que você pode manter e manter-se no topo de uma grande parte do mundo, apenas conhecendo matemática básica.

Michael John
fonte
9
Ao escrever "Combinando todas as 3 regras anteriores: -x ^ 2 + x, em que x = 3 => -3 ^ 2 + 3 = 9 + 3 = 12", você está assumindo que -x ^ 2 = (-x) ^ 2 Você não declarou essa suposição antes. Portanto, sua conclusão é injustificada. Na verdade, se você ler o livro de matemática ou a Wikipedia, perceberá que sua suposição implícita não é seguida. Os livros didáticos de matemática, trabalhos científicos, etc. seguem a suposição de que -x ^ 2 = - (x ^ 2) #
Rodolfo Oviedo
a regra 3 se aplica a operadores binários como +-*/, mas não a operadores unários, como -ou +. A precedência do operador de energia é maior do que *e os /operadores unários têm precedência ainda maior #
phuclv
Em resposta a @RodolfoOviedo, você não está correto. Há uma enorme diferença entre - (x) ^ 2 e -x ^ 2. E é bem claro. Não faz sentido afirmar isso. Sem desrespeito, senhor, mas acho que você acabou de tentar voltar com agressividade passiva. Sinto muito por ter dito algo que o insulta. Eu só estou aqui para ajudar.
Michael John