95 votes

Pour x=3 dans Excel, pourquoi = - x^2 + x donne-t-il 12 au lieu de -6 ?

Supposons que ma cellule A1 dans une feuille de calcul Excel contient le nombre 3 . Si je saisis la formule

= - A1^2 + A1

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

Pourquoi ? Comment puis-je empêcher ce comportement trompeur ?

137voto

Rodolfo Oviedo Points 1978

Réponse courte

Pour résoudre ce problème, il suffit d'ajouter un 0 avant le signe égal.

= 0 - A1^2 + A1

ou ajouter un couple de parenthèses pour forcer l'ordre standard des opérations

= - (A1^2) + A1

ou remplacer le signe moins par son interprétation courante de 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, alors que

= 0-3^2

équivaut à 0-9 = -9.

Pourquoi l'ajout d'un simple 0 change-t-il le résultat ?

N'étant pas précédé d'un point, le signe moins dans -3^2 est considéré comme une opérateur de négation qui est un opérateur unaire (avec un seul argument) qui change le signe du nombre (ou de l'expression) qui suit. Cependant, le signe moins dans 0-3^2 est un opérateur unaire. 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, le opérateur d'exponentiation ^ est calculé après l'opérateur de négation y avant l'opérateur de soustraction . Voir "Opérateurs de calcul et préséance dans Excel" , section "L'ordre dans lequel Excel effectue les opérations dans les formules".

La convention mathématique standard est que le exponentiation est calculé avant la négation et la soustraction ou, plus simplement dit, ^ est calculée avant - . Malheureusement, Excel a choisi des conventions différentes de celles des règles d'algèbre, des manuels scolaires, des écrits universitaires, des calculatrices scientifiques, de Lotus 1-2-3, de Python, des langages à orientation mathématique (Mathematica, Maple, Fortran, Matlab, Julia), MS Travaux, et... VBA (le langage utilisé pour écrire les macros d'Excel) . Malheureusement, Calc de LibreOffice et Google Sheets suivent la même convention pour des raisons de compatibilité avec Excel. Cependant, placer une expression dans la boîte ou la barre de recherche de Google donne d'excellents résultats. Voici une discussion où un mathématicien tue les arguments d'un "informaticien" défendant la préséance de la négation sur l'exponentiation : http://mathforum.org/library/drmath/view/69058.html

Solutions de contournement générales

Si vous voulez calculer

- Anything ^ 2,

ajouter un 0 avant le signe égal

0 - Anything ^ 2

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

- ( Anything ^ 2 )

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

-1 * Anything ^ 2

Parmi les alternatives ci-dessus, je préfère ajouter un 0 avant le signe moins car c'est la plus pratique.

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

- Anything ^ 2 + ExtraTerm,

la meilleure solution est de placer l'ExtraTerm en premier,

ExtraTerm - Anything ^ 2.

Un commentaire sur une autre réponse indique que le seul cas où vous devez tenir compte de la règle de préséance non standard est celui où un signe moins suit un signe égal ( =- ). Cependant, il existe d'autres exemples, comme =exp(-x^2) o =(-2^2=2^2) où il n'y a pas de point avant le signe moins. Avant de connaître cette convention inattendue, j'ai écrit une fois une densité gaussienne dans Excel sous la forme suivante

= EXP(-( (x-mu)/sigma )^2 / 2 ) / sigma / SQRT( 2*PI() ),

ce qui a conduit à des résultats ridicules. J'ai résolu le problème en ajoutant un 0 avant le premier - signe.

Merci à @BruceWayne d'avoir proposé une réponse courte, que j'ai écrite au début.

Vous pourriez être intéressé par Selon Excel, 4^3^2 = (4^3)^2. Est-ce vraiment la convention mathématique standard pour l'ordre d'exponentiation ?

21voto

BruceWayne Points 2595

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

=-(A1^2)+(A1)

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

14voto

trapper Points 248

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

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

Avec un zéro au départ, elle est plutôt traitée comme une soustraction normale.

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

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

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

4voto

routhken Points 41

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

(-x)^2 + x

Quand vous le vouliez :

-(x^2) + x

Pour éviter ce genre de comportement indésirable, je trouve que la meilleure pratique est de faire un usage intensif des parenthèses pour définir votre propre système de priorité, puisque la négation n'est pas la même chose que la soustraction, et n'est donc pas couverte par PEMDAS. Un exemple serait le suivant :

(-(x^2))+x

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

3voto

Gary's Student Points 18946

Vous pouvez l'avoir dans les deux cas :

=-A1^2+A1

retournera un 12 mais :

=0-A1^2+A1

retournera un -6

Si vous pensez que le retour 12 viole le bon sens ; sachez que Google Sheets fait la même chose.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X