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 ?

3voto

Paul Smith Points 147

L'expression = - A1^2 + A1 est spécifique à Excel et doit donc suivre les règles d'Excel. Contrairement à d'autres réponses ici, il n'y a pas d'obligation d'utiliser Excel. correct ordre de préséance. Il existe simplement des conventions différentes adoptées par les différentes applications. Pour votre référence, l'ordre de préséance 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 par des parenthèses.

3voto

lioness99a Points 131

Alternativement, vous pouvez simplement faire

= A1 - A1^2

parce que -y + x = x-y

3voto

user Points 28521

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

Cela se produit parce que les ordinateurs personnels de 1979 avaient une mémoire et une capacité de traitement très limitées.

VisiCalc a été introduit pour l'Apple II en 1979, deux ans avant la sortie initiale de l'application IBM PC (à laquelle la plupart des ordinateurs de bureau et des ordinateurs portables modernes doivent leur ascendance directe). L'Apple II pouvait avoir jusqu'à 64 KiB (65 536 octets) de RAM, et VisiCalc nécessitait au moins 32 KiB pour fonctionner. Pour l'anecdote, VisiCalc est largement considéré comme l'application phare de l'Apple II, et peut-être même des micro-ordinateurs personnels en général.

Moins il y a de cas spéciaux et moins la formule doit être anticipée, plus le code permettant d'analyser une formule de feuille de calcul peut être simplifié (et par conséquent réduit). Il serait donc logique de demander à l'utilisateur d'être un peu plus explicite dans les cas particuliers, en échange de la possibilité de traiter des feuilles de calcul plus grandes. N'oubliez pas que même avec un Apple II haut de gamme, vous ne disposiez que de quelques dizaines de kilo-octets pour jouer après avoir pris en compte la mémoire requise par l'application. Avec un système à faible mémoire (48 KiB de RAM n'était pas une configuration inhabituelle pour une machine "sérieuse"), la limite était encore plus basse.

Lorsqu'IBM a introduit son PC, un portage de VisiCalc sur la nouvelle architecture a été réalisé. Wikipedia fait référence à ce portage comme "compatible avec le bug" On peut donc s'attendre à voir exactement le même comportement d'analyse des formules, même si le système est techniquement capable d'une analyse plus complexe.

À partir de 1982, Microsoft a fait concurrence à VisiCalc, et plus tard à 1-2-3, avec son logiciel Multiplan tableur multiplateforme. Plus tard, Lotus 1-2-3 a été introduit en 1983 spécifiquement pour l'IBM PC, et a rapidement supplanté VisiCalc sur celui-ci. Pour faciliter la transition, il était logique que les deux logiciels analysent les formules de la même manière que VisiCalc. Ainsi, le comportement limité du look-ahead serait reporté.

En 1985, Microsoft introduit Excel à l'origine pour le Macintosh et commençant avec version 2 en 1987 au PC. Là encore, pour faciliter la transition, il était logique de conserver le comportement d'analyse des formules auquel les gens étaient déjà habitués depuis près de dix ans.

Avec chaque mise à jour d'Excel, la possibilité de modifier le comportement existait, mais non seulement les utilisateurs devaient apprendre une nouvelle façon de taper les formules, mais ils risquaient également de rompre la compatibilité avec les feuilles de calcul utilisées ou créées avec la version précédente. Sur un marché encore très concurrentiel où plusieurs sociétés commerciales se font concurrence dans chaque domaine, la décision a probablement été prise de conserver le comportement auquel les utilisateurs étaient habitués.

Avance rapide jusqu'en 2019, et nous sommes toujours coincés avec les décisions relatives au comportement d'analyse des formules prises au plus tard en 1978-1979.

0voto

Luke Oglethorpe Points 11

L'expression - A1^2 contient 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

La première dit qu'il faut d'abord faire l'exponentiation avec les opérandes. A1 y 2 et ensuite faire la négation sur ça.

La seconde dit qu'il faut d'abord faire la négation de l'opérande. A1 et ensuite utiliser l'exponentiation sur le résultat de cette opération et 2 .

Comme il a été dit dans les commentaires de la question, Les pouvoirs ont une priorité plus élevée que les signes moins dans tout environnement sain. Ce qui signifie qu'il est préférable qu'un système prenne en charge le premier.

Cependant, Excel préfère la seconde.

Si vous n'êtes pas sûr que vos environnements soient sains d'esprit ou non, mettez-les entre parenthèses pour être sûr. Ainsi, écrivez -(A1^2) .

-1voto

nitrodmr Points 11

Ce n'est pas un problème avec Excel mais avec les exposants et les négatifs. Lorsque vous prenez un nombre et l'élevez à une puissance paire, 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 des multiplicateurs. -1

-1 * (x^2) + x

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