Pourquoi = -x ^ 2 + x pour x = 3 dans Excel donne-t-il 12 au lieu de -6?

96

Supposons que ma cellule A1 dans une feuille de calcul Excel contienne le chiffre 3 . Si j'entre la formule

= - A1^2 + A1

en A2, alors A2 indique le nombre 12, alors qu'il devrait indiquer -6 (ou -9 + 3)

Pourquoi donc? Comment puis-je prévenir ce comportement trompeur?

Rodolfo Oviedo
la source
19
Un nombre négatif au carré est un nombre positif. Ce qui ferait la formule 9 + 3. - (A1) ^ 2 vous donnerait -6.
Ramhound
68
@Ramhound Les puissances ont une priorité plus élevée que les signes moins dans tout environnement sain.
Personne
17
Cela devrait être - (A1 ^ 2) pour obtenir -6 ... vous avez besoin de parenthèses autour de l'opération, pas seulement le nombre. Excel est parfait pour les mathématiques, mais vous devez respecter l'ordre des opérations et en cas de doute, utilisez des parenthèses!
SnakeDoc
13
Tout est une question d’ordre des opérations et n’a rien à voir avec Excel.
YetAnotherRandomUser
11
À tous les commentateurs critiquant les compétences en mathématiques des PO: En mathématiques pures standard, cela devrait sans ambiguïté être évalué à -6. En particulier, le négatif signifie toujours 0-x (comme indiqué dans la réponse). L’introduction d’un unaire - est un sujet nouveau en informatique appliquée, et presque toujours un détail de mise en œuvre. Critiquer le PO pour ne pas comprendre cela revient à répondre à une question de confusion concernant les erreurs en virgule flottante avec "le programme convient. Il vous suffit de vérifier vos calculs. Vous voyez, si vous écrivez ces nombres en binaire, alors ..."
DreamConspiracy

Réponses:

136

Réponse courte

Pour résoudre ce problème, ajoutez simplement un 0 avant le signe égal

= 0 - A1^2 + A1

ou ajoutez quelques parenthèses pour forcer l'ordre standard des opérations

= - (A1^2) + A1

ou remplacer le signe moins par son interprétation courante de la multiplication par -1

= -1 * A1^2 + A1

Dans ce cas particulier, où vous avez le terme supplémentaire + A1, la meilleure solution est celle proposée par @ lioness99a:

= A1 - A1^2

Explication détaillée

Sous les conventions d'Excel,

= - 3^2

est égal à (-3) ^ 2 = 9, tandis que

= 0-3^2

est égal à 0-9 = -9.

Pourquoi ajouter seulement un 0 change le résultat?

Non précédé d'un minuend, le signe moins dans -3 ^ 2 est considéré comme un opérateur de négation , qui est un opérateur unaire (avec un seul argument) qui modifie le signe du nombre (ou de l'expression) qui suit. Cependant, le signe moins dans 0-3 ^ 2 est un opérateur de soustraction , qui est un opérateur binaire qui soustrait ce qui suit -de ce qui précède -. Selon les conventions d'Excel, l' opérateur d'exponentiation ^ est calculé après l'opérateur de négation et avant l'opérateur de soustraction . Voir "Opérateurs de calcul et priorité dans Excel" , section "Ordre dans lequel Excel effectue les opérations dans les formules".

La convention mathématique standard est que l' exponentiation est calculée avant la négation et la soustraction ou, plus simplement, elle ^est calculée avant -. Honteusement, Excel a choisi différentes conventions parmi celles des règles d’algèbre, des manuels scolaires, des écrits académiques, des calculatrices scientifiques, Lotus 1-2-3, Mathematica, Maple, des langages orientés calcul comme Fortran ou Matlab, MS Works et ... VBA (the langue utilisée pour écrire les macros d'Excel). Malheureusement, Calc de LibreOffice et Google Sheets suivent la même convention de compatibilité avec Excel. Toutefois, l'insertion d'une expression dans le champ de recherche ou dans la barre de recherche de Google donne d'excellents résultats. Si vous appuyez sur Entrée, l'ordre des calculs sera donné en utilisant des parenthèses. Une discussion où un mathématicien tue les arguments d'un "informaticien" défendant la préséance de la négation sur l'exponenciation: http://mathforum.org/library/drmath/view/69058.html

Contournements généraux

Si vous voulez calculer

- Anything ^ 2,

ajouter un 0 avant le signe égal

0 - Anything ^ 2

ou ajoutez quelques parenthèses pour forcer l'ordre standard des opérations

- ( Anything ^ 2 )

ou remplacer le signe moins par son interprétation courante de la multiplication par -1

-1 * Anything ^ 2

Parmi les alternatives ci-dessus, je préfère ajouter un 0 avant le signe de moins car c'est le plus pratique. Si l'expression est déjà entourée de parenthèses, j'évite d'ajouter des parenthèses. L'utilisation fréquente de parenthèses rend les expressions plus difficiles à lire, à déboguer et à écrire.

Si un terme supplémentaire est ajouté (ou soustrait sans le problème de puissance constante),

- Anything ^ 2 + ExtraTerm,

la meilleure solution consiste à placer l'ExtraTerm en premier,

ExtraTerm - Anything ^ 2.

Un commentaire à une autre réponse indique que le seul cas dans lequel vous devez être conscient de la règle de priorité non standard est lorsqu'un signe moins suit un signe égal (= -). Cependant, il existe d'autres exemples, comme = exp (-x ^ 2) ou = (- 2 ^ 2 = 2 ^ 2), où il n'y a pas de minuend avant le signe moins.

Merci à @BruceWayne d’avoir proposé une réponse brève, que j’avais écrite au début.

Vous pouvez être intéressé Selon Excel, 4 ^ 3 ^ 2 = (4 ^ 3) ^ 2. Est-ce vraiment la convention mathématique standard?

Rodolfo Oviedo
la source
1
Les commentaires ne sont pas pour une discussion prolongée; cette conversation a été déplacée pour discuter .
DavidPostill
S'il vous plaît voir ci-dessus. Tous les commentaires seront supprimés s'ils ne font pas partie de la discussion en ligne.
DavidPostill
20

Un peu plus succint que la réponse de Rodolfo, vous pouvez utiliser:

=-(A1^2)+(A1)

(Edit: je n'ai tout simplement pas vu que c'était une question / réponse personnelle.)

Bruce Wayne
la source
1
Exactement! Selon la langue ou les règles de priorité des applications, être une recette pour le problème.
jamesqf
2
@jamesqf, mais il doit y avoir un sens et des limites à cela. Personne n'écrit 2+ (3 * 4). Si une langue comporte des opérations arithmétiques et des règles de priorité, elle doit absolument prendre en charge toutes les conventions mathématiques standard. Il n'y a aucune excuse pour une telle erreur dans Excel.
Zeus
4
@ Zeus: Personne? Je le ferais probablement, surtout si c'était dans une expression plus compliquée, ou une condition si. Bien sûr, j'écrirais 3 * 4 + 2 même si je laissais de côté les parens.
jamesqf
3
Je soupçonnais depuis longtemps qu'une telle habitude de surexploitation des parens venait de la surexposition (tellement répandue) au C (et à ses descendants syntaxiques). Mais C n’est en aucun cas un bon exemple de bonne application des règles mathématiques, y compris la priorité (en plus des problèmes de macros). En revanche, les personnes initialement exposées à des systèmes / langages plus académiques s'attendent fortement à une conception correcte et n'ont pas tendance à faire des concessions «au cas où». D'où de vraies surprises comme dans le PO.
Zeus
14

Un -début est considéré comme faisant partie du premier terme.

=-3^2 est traité comme (-3)^2 = 9

Avec un zéro au début, il est plutôt traité comme une soustraction normale.

=0-3^2 est traité comme 0 - 3^2 = -9

Et si vous avez deux opérateurs, la même chose se passera.

=0--3^2est traité comme 0 - (-3)^2 = -9et =0+-3^2est traité comme0 + (-3)^2 = 9

trappeur
la source
4

Parce qu'Excel interprète votre équation comme suit:

(-x) ^ 2 + x

Quand tu voulais:

- (x ^ 2) + x

Pour éviter ce genre de comportement indésirable, je trouve que la meilleure pratique consiste à utiliser fortement la parenthèse pour définir votre propre système de priorité, car la négation n'est pas la même chose que la soustraction et n'est donc pas couverte par PEMDAS. Un exemple serait comme:

(- (x ^ 2)) + x

C'est peut-être exagéré, mais je garantis qu'Excel se comporte comme je le souhaite.

Routhken
la source
4
“PEMDAS n'étant pas garanti dans Excel” - Non, il est absolument garanti dans Excel. Tout le reste serait de la folie. Que la négation unaire (distincte de la soustraction!) Ait priorité sur l’exponentiation n’est pas couvert par PEMDAS.
Konrad Rudolph
1
@routhken L'utilisation intensive de parenthèses rend la rédaction, l'édition et le débogage compliqués. Pour faciliter ces tâches, je vérifie la priorité des opérateurs dans le logiciel avec lequel je travaille et n'utilise que les parenthèses nécessaires. De plus, j'ajoute des espaces pour améliorer la lisibilité.
Rodolfo Oviedo
@ KonradRudolph J'ai édité ma réponse, merci pour la clarification.
Routhken
1
Je préférerais utiliser x - x^2. Cela garantit que - est interprété comme un opérateur de soustraction binaire.
Xalorous
@ KonradRudolph Je pense que la meilleure façon de voir cela est que les feuilles de calcul et les langages de programmation informatique utilisent PUEMDAS où les opérations unaires sont évaluées après des opérations entre parenthèses mais avant des opérations mathématiques binaires.
Xalorous
3

L'expression = - A1^2 + A1est spécifique à Excel et doit donc suivre les règles Excels. Contrairement à d’autres réponses, il n’existe pas d’ ordre de priorité correct . Il existe simplement différentes conventions adoptées par différentes applications. Pour votre référence, l'ordre de priorité utilisé par excel est le suivant:

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

Que vous pouvez remplacer en utilisant des parenthèses.

Paul Smith
la source
9
Bien entendu, Excel aurait pu choisir + pour signifier multiplication et * pour signifier soustraction, etc. et quiconque ayant besoin d’utiliser Excel devrait le savoir. Mais cela aurait été faux. Le cas d'espèce n'est pas le même niveau de faux (ou de stupide), mais vous pouvez certainement affirmer qu'Excel défini a mal défini les priorités.
Mormegil
4
@Mormegil Bien dit! Une fois que vous essayez = 1 + 2 * 2 et que vous voyez que la réponse est 5 et non 6. vous êtes amené à supposer qu'Excel respecte les règles de l'algèbre. Quel est l'intérêt de tromper les gens?
Rodolfo Oviedo
Il existe un ordre de priorité correct, mais les ordinateurs ont des opérations supplémentaires. Le problème ici est que les ordinateurs utilisent '-' pour la négation ET pour la soustraction lorsque la personne effectuant l'algèbre écrite voit une distinction entre la négation et la soustraction. Pour que l'ordinateur fasse la différence, il faut un ensemble de règles. Dans '-x', le '-' est un opérateur unaire (agit sur un opérande). Dans '1-x', le '-' est un opérateur binaire. Ainsi, Excel (et d’autres logiciels informatiques) convertit -x ^ 2 en (-x) ^ 2. Le reste de l'ordre de priorité s'applique toujours, comme nous l'avons tous appris à l'école primaire.
Xalorous
3
@Xalorous: Oui, -peut être unaire ou binaire. Mais cela ne signifie pas un ordre des opérations. D'autres langues ont cette idée: en Python, Ruby, Octave, Awk et Haskell (les cinq premières langues avec un opérateur d'exponentiation qui leur est venu à l'esprit), sont -3 ** 2toujours évaluées -9. Pourquoi? Parce que c'est la bonne réponse.
wchargin
1
@Xalorous la personne qui fait de l'algèbre écrite utilise les conventions de son public combinées avec des parenthèses pour réduire les ambiguïtés. Il n’existe pas d’ ordre de priorité correct et les règles de l’algèbre ne sont en réalité que des conventions.
Paul Smith
3

Vous pouvez l'avoir de toute façon:

=-A1^2+A1

retournera un 12 , mais:

=0-A1^2+A1

retournera un -6

Si vous estimez que le retour de 12 viole le bon sens; Sachez que Google Sheets fait la même chose.

Gary's Student
la source
1
Il semble que le signe moins unaire ait une priorité "trop ​​élevée".
Andreas Rejbrand
@AndreasRejbrand Il semble être unitaire que s'il suit directement le signe = ............... =A1-A1^2renvoie également -6
Gary's Student
2
Mais dans l'exemple A1 - A1 ^ 2, le signe moins est évidemment binaire. (Un opérateur unaire est celui qui prend un seul opérande (comme le signe moins unaire dans -5, ou le factoriel, le signe non, etc.); un opérateur binaire est un opérateur qui prend deux opérandes (comme binaire plus, moins, multiplication, union, etc.).) Notez que le signe moins peut être unaire même s'il ne suit pas immédiatement après le signe égal: 5 + (-4 + 3).
Andreas Rejbrand
@AndreasRejbrand Je suis tout à fait d'accord avec vous!
Gary's Student
Juste pour défendre la réputation de Google, essayez la barre de recherche ou la barre de saisie pour saisir des expressions mathématiques. Vous obtiendrez des résultats cohérents avec de bonnes mathématiques, voire mieux que ceux de Matlab ou Octave, par exemple, essayez 2 ^ 1 ^ 2.
Rodolfo Oviedo
3

Alternativement, vous pouvez simplement faire

= A1 - A1^2

parce que -y + x = x-y

lioness99a
la source
Cela n'explique pas pourquoi cela devrait fonctionner et duplique de nombreuses réponses précédentes.
Fix1234
@ fix1234 Littéralement, personne d'autre n'a dit cela, et j'en ai donné la raison mathématique?
lioness99a
1. Beaucoup de réponses décrivent le fait de transformer cela en une soustraction explicite. 2. Ce n'est pas la raison mathématique. La question est de savoir pourquoi Excel ne se comporte pas de cette façon. La réponse est que le négatif n'est pas traité comme une soustraction par Excel.
Fix1234
Ils ont demandé comment prévenir le comportement. Je leur ai montré le moyen le plus simple. Et pas une seule réponse ne dit ce que j'ai ...
lioness99a
La meilleure solution. J'ai ajouté à ma réponse avec crédit. Si vous avez aimé la QUESTION, veuillez l’avancer.
Rodolfo Oviedo le
2

D'autres personnes ont répondu "Comment puis-je éviter cela?" une partie de la question. Je vais vous dire pourquoi cela se produit.

Cela se produit parce qu'en 1979, les ordinateurs personnels avaient une capacité de mémoire et de traitement très limitée.

VisiCalc a été introduit pour Apple II en 1979, deux ans avant la publication initiale du PC IBM (auquel la plupart des ordinateurs de bureau et portables modernes retracent leur ascendance directe). L'Apple II peut être utilisé avec jusqu'à 64 Ko (65 536 octets) de RAM et VisiCalc nécessite au moins 32 Ko pour fonctionner. En passant, VisiCalc est assez largement considéré comme l'application "tueur" pour Apple II, et peut-être même pour les micro-ordinateurs personnels en général.

Moins le nombre de cas spéciaux et le nombre de formules pré-requis à rechercher sont importants, plus le code permettant d'analyser une formule de tableur est simple (et par conséquent plus petit). Il serait donc logique d'exiger de l'utilisateur qu'il soit un peu plus explicite dans les cas critiques, en échange de sa capacité à gérer des feuilles de calcul plus volumineuses. N'oubliez pas que même avec un Apple II haut de gamme, vous ne disposiez que de quelques dizaines de kilo-octets après la prise en compte de la mémoire requise par l'application. Avec un système à faible mémoire (48 Ko de RAM n'était pas une configuration inhabituelle pour une machine "sérieuse"), la limite était encore plus basse.

Lorsque IBM a présenté son PC, un portage de VisiCalc vers la nouvelle architecture a été créé. Wikipedia qualifie ce port de "compatible avec les bogues" . Vous vous attendez donc à voir le même comportement d'analyse de formule, même si le système était techniquement capable d'une analyse plus complexe.

À partir de 1982, Microsoft a concouru avec VisiCalc, puis 1-2-3, avec son tableur multiplateforme Multiplan . Plus tard, Lotus 1-2-3 a été introduit en 1983 spécialement pour le PC IBM et a rapidement dépassé VisiCalc. Pour faciliter la transition, il était logique que les deux analysent les formules de la même manière que VisiCalc. Ainsi, le comportement d'anticipation limité serait reporté.

En 1985, Microsoft a introduit Excel sur PC , à l’origine pour Macintosh et à partir de la version 2 en 1987 . Encore une fois, pour faciliter la transition, il était logique de poursuivre le comportement d'analyse syntaxique auquel les gens étaient habitués depuis près d'une décennie.

Avec chaque mise à niveau d'Excel, il était possible de modifier le comportement, mais non seulement les utilisateurs devaient apprendre un nouveau moyen de taper des formules, ils risquaient également de briser la compatibilité avec les feuilles de calcul utilisées ou créées avec la version précédente. Dans un marché toujours très concurrentiel où plusieurs sociétés commerciales se font concurrence dans chaque domaine, il a probablement été décidé de conserver le comportement auquel les utilisateurs étaient habitués.

En 2019, nous sommes toujours aux prises avec les décisions de comportement d'analyse de formule prises au plus tard en 1978-1979.

un CVn
la source
mathforum.org/library/drmath/view/69058.html et macnauchtan.com/pub/precedence.html#_Aworks indiquent que Lotus 1-2-3 respecte les conventions algébriques courantes.
Rodolfo Oviedo
0

L'expression - A1^2contient deux opérateurs, à savoir l'opérateur de négation unaire -et l'opérateur d'exponentiation binaire ^. En l'absence de toute parenthèse, il pourrait y avoir deux interprétations. Soit:

-(A1^2)

ou:

(-A1)^2

Le premier dit d'abord faire l'exponentiation avec des opérandes A1et 2, ensuite, faire la négation à ce sujet.

Le second dit d’abord faire la négation sur l’opérande A1, puis utiliser l’exponentiation sur le résultat de et 2.

Comme il a été dit dans les commentaires sur la question, les puissances ont une priorité plus élevée que les signes moins dans tout environnement sain. Ce qui signifie qu’il est préférable que le système assume le premier.

Cependant, Excel préfère le second.

La leçon est que, si vous ne savez pas si votre environnement est sain ou non, incluez la parenthèse pour indiquer votre sécurité. Alors écris -(A1^2).

Jeppe Stig Nielsen
la source
Cela duplique la réponse acceptée et d’autres réponses antérieures.
Fix1234
-1

Ce n’est pas un problème avec Excel mais avec des exposants et des négatifs. Lorsque vous prenez un nombre et que vous le montez à une puissance égale, vous annulez le signe négatif.

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

Vous devez utiliser des parenthèses et plusieurs par -1

-1 * (x^2) + x
nitrodmr
la source
10
Ce n'est pas comme ça que les signes fonctionnent. Ce devrait être: x = 3 => - (3 * 3) + 3 = 6. Excel n’utilise tout simplement pas la convention algébrique standard.
Henning
3
@henning Comme mentionné dans un autre commentaire, bien que ce ne soit pas la convention «standard», c'est une convention, même si ce n'est pas la plus courante. Dire que «ce n'est pas ainsi que les signes fonctionnent» est donc tout à fait incorrect. Ce n’est pas ainsi que les signes fonctionnent dans les conditions d’utilisation dominantes.
Konrad Rudolph
2
@ KonradRudolph Fair assez. Je reconnais que je ne suis au courant que de l’usage dominant, ce qui, j’estime, a causé la confusion chez OP.
henning
6
Non, absolument est un problème avec Excel. Excel utilise les règles incorrectes pour la priorité des opérateurs.
Dawood ibn Kareem
S'il vous plaît noter la différence entre -x^2où x est 3 et x^2où x est -3. -x^2+xn'atteindra jamais 12: wolframalpha.com/input/?i=-x%5E2%2Bx
Thomas Weller
-2

-x ^ 2 + x où x = 3 Voici un exemple d'équation du second degré L'équation peut être écrite comme suit: -3 * -3 + 3: la multiplication a la priorité sur l'addition; le résultat sera donc écrit comme suit: 9 + 3 : Pourquoi = 9 car un nombre négatif x un nombre négatif donne un résultat positif. Ceci peut être vérifié à l’aide d’une calculatrice, d’une règle à calcul ou d’un programme de mathématiques informatiques. Résultat final 9 + 3 = 12

Cripple2Cripple
la source
-3

C'est juste un calcul très simple.

Règle 1. Même les multiplications de nombres négatifs produiraient un résultat positif:

moins * moins = plus

moins * moins * moins = moins

moins * moins * moins * moins = plus

Cela est dû au fait que les inconvénients s'annulent par paires.

Règle 2. La puissance de chaque nombre indique que ce nombre sera multiplié par lui-même plusieurs fois.

(2) ^ n, où n = 2 => 2 * 2 = 4

(-2) ^ n, où n = 2 => (-2) * (- 2) = 4

Et si vous pouvez voir la règle numéro 1 ..

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

Règle 3. La multiplication et la division ont une priorité plus élevée que l'addition et la soustraction.

3 * 5 + 2 = 15 + 2 = 17

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

Et voici la réponse à votre question:

Combinant les 3 règles précédentes:

-x ^ 2 + x, où x = 3 => -3 ^ 2 + 3 = 9 + 3 = 12

Je vous conseille de passer du temps chaque année et de continuer à actualiser les règles fondamentales des mathématiques.

Il s’agit en fait d’une compétence que vous pouvez maintenir et garder au sommet d’une grande partie du monde en ne maîtrisant que les bases de la mathématique.

Michael John
la source
9
Lorsque vous écrivez "En combinant les 3 règles précédentes: -x ^ 2 + x, où x = 3 => -3 ^ 2 + 3 = 9 + 3 = 12", vous supposez que -x ^ 2 = (-x) ^ 2. Vous n'avez pas énoncé cette hypothèse auparavant. Par conséquent, votre conclusion est injustifiée. En fait, si vous lisez un manuel de mathématiques ou Wikipedia, vous remarquerez que votre hypothèse implicite n’est pas suivie. Les manuels de mathématiques, les articles scientifiques, etc., partent de l'hypothèse que -x ^ 2 = - (x ^ 2)
Rodolfo Oviedo
La règle 3 s'applique aux opérateurs binaires comme +-*/, mais pas aux opérateurs unaires comme -ou +. La priorité de l'opérateur électrique est plus élevée que *et les /opérateurs unaires ont encore plus de priorité
phuclv
En réponse à @RodolfoOviedo, vous n'êtes pas correct. Il y a une énorme différence entre - (x) ^ 2 et -x ^ 2. Et c'est assez clair. Il ne sert à rien que je le dise. Sans manquer de respect, monsieur, mais j’ai le sentiment que vous venez d’essayer de revenir de manière agressive et passive. Je suis désolé si j'ai dit quelque chose qui vous insulte. Je ne suis ici que pour aider.
Michael John