Ordre de les operacions

De Viquipèdia
Dreceres ràpides: navegació, cerca

En matemàtiques i programació, l'ordre de les operacions és una regla utilitzada per a establir quines operacions s'han de realitzar en primer lloc en una determinada expressió algebraica.

Per exemple, en matemàtiques, i en la majoria de llenguatges de programació, la multiplicació es realitza abans de la suma; en l'expressió 2 + 3 x 4, la resposta és 14. Per evitar confusions s'hi poden utilitzar els parèntesis i altres signes com ara els claudàtors o les claus, que tenen les seves pròpies regles; així, l'expressió anterior es pot representar també com 2 + (3 x 4), però els parèntesis són innecessaris atès que, sense ells, la multiplicació té igualment precedència.

Des de la introducció de la notació algebraica moderna, la multiplicació ha tingut precedència sobre la suma.[1] Així, 3 + 4 × 5 = 4 × 5 + 3 = 23. Els segles XVI i XVII, quan es van introduir els exponents per primer cop, van prendre precedència tant sobre la suma com sobre la multiplicació, i només es podien col·locar com a superíndex a la dreta de la seva base. Així, 3 + 52 = 28 i 3 × 52 = 75.

Originalment, per a canviar l'ordre de les operacions s'utilitzava una línia horitzontal inferior o superior que indicava explícitament les parts de l'expressió que s'havien d'avaluar en primer lloc, però actualment s'utilitzen els parèntesis o claudàtors amb aquesta finalitat. D'aquesta manera, per forçar que la suma precedeixi a la multiplicació, s'escriu (2 + 3) × 4 = 20 (ja que el resultat seria 14 sense els parèntesis) i, per forçar que la suma precedeixi a la potenciació, s'escriu (3 + 5)2 = 64 (que seria 28 sense els parèntesis).

L'ordre estàndard de les operacions[modifica | modifica el codi]

L'ordre de les operacions utilitzat en matemàtiques, ciència, tecnologia i molts llenguatges de programació és el següent:[2]

Això significa que, si una expressió matemàtica és precedida per un operador i seguida per un altre, cal aplicar primer l'operador que es trobi més amunt en la llista. Les propietats commutativa i associativa de l'addició i subtracció permeten que els termes s'afegeixin en qualsevol ordre i que els factors es multipliquin en qualsevol ordre, però les operacions mixtes han d'obeir l'ordre estàndard de les operacions.

Pot resultar útil tractar la divisió com a una multiplicació pel recíproc (invers multiplicatiu) i la subtracció com a una addició amb l'oposat (invers additiu). Així, 3/4 = 3 ÷ 4 = 3 · ¼; dit d'una altra manera, el quocient de 3 i 4 és igual al producte de 3 i  ¼. Igualment, 3 − 4 = 3 + (−4); en altres paraules, la diferèrencia de 3 i 4 és igual a la suma del 3 positiu i del 4 negatiu. Des d'aquest punt de vista, podem pensar en 1 − 3 + 7 com la suma d'1, 3 negatiu, i 7, i afegits en qualsevol ordre: (1 − 3) + 7 = −2 + 7 = 5 i, a l'inrevés, (7 − 3) + 1 = 4 + 1 = 5. Allò que és important és conservar el signe negatiu amb el 3.

El símbol de radicació, √, requereix un símbol d'agrupament al voltant del radical, que normalment és una línia horitzontal sobre el radicand. Altres funcions usen parèntesis per evitar ambigüitats, però se solen ometre si l'expressió és un monomi. Així, sin x = sin(x), però sin x + y = sin(x) + y, perquè x + y no és un monomi. Normalment, en les calculadores cal indicar els parèntesis al voltant de totes les expressions de funció.

Per alterar l'ordre normal de les operacions es poden utilitzar símbols d'agrupament; els símbols agrupats es poden utilitzar com a una única expressió, i es poden eliminar utilitzant les lleis associativa i distributiva, o bé si l'expressió inclosa en el símbol és prou simplificada com per no generar ambigüitats en cas d'eliminar-los.

Exemples[modifica | modifica el codi]

\sqrt{1+3}+5=\sqrt4+5=2+5=7.\,

Una línia de fracció horitzontal actua també com a símbol:

\frac{1+2}{3+4}+5=\frac37+5.

Per tal de facilitar la lectura, en conjunció amb els parèntesis s'utilitzen sovint altres símbols d'agrupament, com ara les claus o els claudàtors. Per exemple,

[(1+2)-3]-(4-5) = [3-3]-(-1) = 1. \,

Excepcions de l'estàndard[modifica | modifica el codi]

Existeixen diferents convencions pel que fa a l'operador unari "–" (que normalment es llegeix com "menys"). En matemàtiques escrites o impreses, l'expressió −32 s'interpreta com −(32) = −9,[3] pero en algunes aplicacions i llenguatges de programació, especialment Microsoft Excel i el llenguatge de programació bc, els operadors unaris tenen una prioritat més alta que els binaris, és a dir, el "menys" unari (negació) té una prioritat més alta que la potenciació i, per tant, en aquests llenguatges, −32 s'interpretarà com (−3)2 = 9.[4] Normalment, en els casos en què hi ha la possibilitat que la notació es pugui interpretar incorrectament, s'utilitzen parèntesis per aclarir el significat pretès; tanmateix, a causa de la sintaxi dels principals llenguatges de programació, normalment és difícil o impossible crear ambigüitats.

De la mateixa manera, hi pot haver ambigüitat en l'ús de la barra inclinada ("/") en expressions com ara 1/2x. Si es reescriu aquesta expressió com 1 ÷ 2 × "x", i després es transforma la divisió en una multiplicació pel recíproc, esdevé

1 \div 2 \times x = 1 \times \tfrac{1}{2} \times x = \tfrac{1}{2}x.

Així doncs, amb aquesta interpretació tenim que 1/2x és igual a (1/2)x, i no 1/(2x). Tanmateix, hi ha exemples, fins i tot en publicacions, on la multiplicació implícita s'interpreta com si tingués una prioritat més alta que la divisió, de manera que 1/2x equival a 1/(2x), no a (1/2)x. Per exemple, les instruccions d'enviament de manuscrits de les revistes de Physical Review afirmen que la multiplicació té una prioritat més alta que la divisió amb una barra,[5] i és també aquesta la convenció que s'observa en importants llibres de text de física com ara el Course of Theoretical Physics de Landau i Lifshitz i les Feynman Lectures on Physics.[6] A més, Wolfram Alpha considera que la multiplicació implícita sense parèntesis precedeix a la divisió, a diferència de la multiplicació explícita o la multiplicació implícita amb parèntesis; així, tant 2*x/2*x com 2(x)/2(x) donen x2 com a resultat, però 2x/2x dóna 1.[7] La calculadora TI 89 dóna x2 en tots tres casos.

Casos especials[modifica | modifica el codi]

Un signe d'exclamació indica que cal calcular el factorial del terme que es troba immediatament a la seva esquerra abans de calcular qualssevol operacions de prioritat inferior, tret que els símbols d'agrupament indiquin una altra cosa. Però 23! dóna un resultat de (23)! = 8! = 40320, mentre que 23! = 26 = 64; un factorial en un exponent s'aplica a l'exponent, mentre que un factorial que no és a l'exponent s'aplica a tota la potència.

Si la potenciació s'indica amb símbols apilats, la regla és avaluar de dalt a baix, d'aquesta manera:

 a^{b^c} = a^{(b^c)} \ne (a^b)^c. \,

De vegades s'utilitza un punt volat gruixut (•) com a signe de multiplicació, que indica que tota l'expressió anterior al punt es multiplica per tota l'expressió posterior, però aquesta notació pot ser malinterpretada, Així, es pot utilitzar x + y • a + b en comptes de (x + y)(a + b), per aquesta darrera notació és més habitual. Tanmateix, moltes processadors matemàtics imposen una regla de "primer la multiplicació", esdevenint així x + (ya) + b.

Calculadores[modifica | modifica el codi]

Calculadores diferents segueixen ordres d'operació diferents. La majoria de calculadores no científiques que no posseeixen pila operen d'esquerra a dreta sense donar cap prioritat als diferents operadors. Per exemple, calculen així:

1 + 2 \times 3 = 9, \;

mentre que calculadores més sofisticades utilitzen una prioritat més estàndard, calculant d'aquesta altra manera:

1 + 2 \times 3 = 7. \;

La calculadora de Microsoft utilitza el primer sistema en el mode bàsic, i el segon en el mode científic i de programació.

Les calculadores no científiques assumeixen que se'ls introduirà dos operands i un operador; quan s'hi introdueix el següent operador, l'expressió s'avalua immediatament i el resultat esdevé el terme esquerre de l'operació següent, mentre que les calculadores avançades permeten la introducció d'expressions completes, amb agrupaments si és necessari, i no les calculen fins que l'usuari utilitzi el signe "igual".

Segons el model, les calculadores poden associar els exponents de l'esquerra o de la dreta. Per exemple, l'expressió a ^ b ^ c en la TI-92 i la TI-30XII (totes dues de Texas Instruments) fan associacions diferents:

La TI-92 fa l'associació per la dreta, és a dir:

a ^ b ^ c = a ^ (b ^ c) =  a^{(b^c)} = a^{b^c}

mentre que la TI-30XII la fa per l'esquerra:

a ^ b ^ c = (a ^ b) ^ c =  (a^b)^c.

Una expressió com ara 1/2x és interpretada com a 1/(2x) per la TI-82, però com a (1/2)x per la TI-83.[8] Mentre que alguns usuaris esperarien la primera interpretació, solament la segona compleix la regla per la qual tant la multiplicació com la divisió tenen la mateixa prioritat, i per tant 1/2x es llegeix "un dividit per dos, i el resultat multiplicat per x".

Quan l'usuari no està segur de com una calculadora interpretarà l'expressió, és bona idea utilitzar parèntesis per evitar tota ambigüitat.

Llenguatges de programació[modifica | modifica el codi]

Molts llenguatges de programació utilitzen nivells de prioritat que s'adiuen a l'ordre que s'usa habitualment en matemàtiques, tot i que alguns, com ara l'APL i l'Smalltalk, no tenen regles de prioritat dels operadors; en APL, l'avaluació es realitza sempre de dreta a esquerra, i l'Smalltalk ho fa sempre d'esquerra a dreta.

Els operadors lògics bit a bit en el llenguatge C (i en tots els altres llenguatges que han seguit les regles de prioritat del C, com ara el C++, el Perl i el PHP) tenen un nivell de prioritat que el creador del C considerà insatisfactori.[9] Tanmateix, molts programadors s'hi han acabat acostumant.

Els compiladors font-a-font que compilen diversos llenguatges han de gestionar explícitament la problemàtica dels diferents ordres de les operacions entre llenguatges. Per exemple, el Haxe estandarditza l'ordre i el reforça inserint parèntesis allà on calgui.[10]

S'ha vist que l'exactitud del coneixement dels desenvolupadors de programari sobre la prioritat dels operadors binaris té una correspondència directa amb la seva freqüència d'aparició en el codi font.[11]

Enlaços externs[modifica | modifica el codi]


Referències[modifica | modifica el codi]

  1. «Ask Dr. Math». Math Forum, 22 de novembre de 2000. [Consulta: 5 de març de 2012]. (anglès)
  2. «Order of Operations Lessons». Algebra.Help. [Consulta: 5 de març de 2012]. (anglès)
  3. Allen R. Angel, Elementary Algebra for College Students 8/E; Chapter 1, Section 9, Objective 3 (anglès)
  4. «Formula Returns Unexpected Positive Value». Support.microsoft.com, 15 d'agost de 2005. [Consulta: 5 de març de 2012]. (anglès)
  5. «Physical Review Style and Notation Guide». American Physical Society. [Consulta: 5 d'agost de 2012]. (anglès)
  6. Per exemple, la tercera edició de Mechanics de Landau i Lifshitz conté expressions com ara hPz/2π (p. 22), i el primer volum de les Feynman Lectures conté expressions com ara 1/2N (p. 6–8). En ambdós llibres, aquestes expressions s'escriuen amb la convenció que la barra s'avalua en darrer lloc.
  7. «2x÷2x - Wolfram|Alpha». Wolframalpha.com. [Consulta: 5 de març de 2012]. (anglès)
  8. «Implied Multiplication Versus Explicit Multiplication on TI Graphing Calculators». Texas Instruments Incorporated, 16 de gener de 2011. [Consulta: 29 d'abril de 2011]. (anglès)
  9. Dennis M. Ritchie: The Development of the C Language. In History of Programming Languages, 2nd ed., ACM Press 1996. (anglès)
  10. 6÷2(1+2)=? Andy Li's Blog. 2 de maig de 2011. Consultat el 31 de desembre de 2012. (anglès)
  11. "Developer beliefs about binary operator precedence" Derek M. Jones, CVu 18(4):14–21 (anglès)