Ordning för operationer

Inom matematik och datorprogrammering är operationsordningen (eller operatorprecedens ) en samling regler som återspeglar konventioner om vilka procedurer som ska utföras först för att utvärdera ett givet matematiskt uttryck .

Till exempel, i matematik och de flesta datorspråk, ges multiplikation högre företräde än addition, och det har varit så sedan införandet av modern algebraisk notation . Således tolkas uttrycket 1 + 2 × 3 att ha värdet 1 + (2 × 3) = 7 och inte (1 + 2) × 3 = 9 . När exponenter introducerades på 1500- och 1600-talen fick de företräde framför både addition och multiplikation, och kunde placeras endast som en upphöjd till höger om deras bas. Således 3 + 5 2 = 28 och 3 × 5 2 = 75 .

Dessa konventioner finns för att eliminera notationell tvetydighet , samtidigt som notationen blir så kort som möjligt. Där det är önskvärt att åsidosätta prioritetskonventionerna, eller till och med helt enkelt betona dem, parenteser ( ) användas. Till exempel (2 + 3) × 4 = 20 addition att föregå multiplikation, medan (3 + 5) 2 = 64 tvingar addition att föregå exponentiering . Om flera par av parenteser krävs i ett matematiskt uttryck (som i fallet med kapslade parenteser), kan parentesen ersättas med parenteser eller klammerparenteser för att undvika förvirring, som i [2 × (3 + 4)] − 5 = 9 .

Definition

Operationsordningen, som används inom matematik, naturvetenskap, teknik och många datorprogrammeringsspråk, uttrycks här:

  1. exponentiering och rotextraktion
  2. multiplikation och division
  3. addition och subtraktion

Detta betyder att om, i ett matematiskt uttryck, ett underuttryck förekommer mellan två operatorer , ska operatorn som är högre upp i listan ovan tillämpas först.

De kommutativa och associativa lagarna för addition och multiplikation tillåter addering av termer i valfri ordning, och multiplicera faktorer i valfri ordning – men blandade operationer måste följa standardordningen för operationer.

I vissa sammanhang är det bra att ersätta en division med multiplikation med den reciproka (multiplikativ invers) och en subtraktion genom att addera motsatsen (additiv invers). Till exempel i datoralgebra tillåter detta att man hanterar färre binära operationer och gör det lättare att använda kommutativitet och associativitet när man förenklar stora uttryck (för mer, se Datoralgebra § Förenkling ). Således 3 ÷ 4 = 1/4 ; med andra ord 3 × 1/4 , kvoten av 3 och 4 är lika med produkten av 3 och . Även 3 − 4 = 3 + (−4) ; med andra ord är skillnaden mellan 3 och 4 lika med summan av 3 och −4. Således 1 − 3 + 7 ses som summan av 1 + (−3) + 7 , och de tre summeringarna kan läggas till i valfri ordning, i alla fall ger 5 som resultat.

Rotsymbolen √ förlängs traditionellt med ett streck (kallat vinculum ) över radikanden (detta undviker behovet av parenteser runt radikanden). Andra funktioner använder parenteser runt ingången för att undvika oklarheter. Parenteserna kan utelämnas om inmatningen är en enda numerisk variabel eller konstant, som i fallet med sin x = sin( x ) och sin π = sin(π) . En annan genvägskonvention som ibland används är när ingången är monomial ; alltså, sin 3 x = sin(3 x ) snarare än (sin(3)) x , men sin x + y = sin( x ) + y , eftersom x + y inte är ett monomial. Detta är dock tvetydigt och inte allmänt förstådd utanför specifika sammanhang. Vissa miniräknare och programmeringsspråk kräver parenteser runt funktionsingångar, vissa gör det inte.

Symboler för gruppering kan användas för att åsidosätta den vanliga operationsordningen. Grupperade symboler kan behandlas som ett enda uttryck. Symboler för gruppering kan tas bort med hjälp av de associativa och distributiva lagarna, de kan också tas bort om uttrycket inuti symbolen för gruppering är tillräckligt förenklat så att ingen tvetydighet blir resultatet av att de tas bort.

Exempel

En horisontell bråklinje fungerar också som en symbol för gruppering:

används ofta andra grupperingssymboler, som parenteser { } eller hakparenteser [ ] , tillsammans med parenteser ( ) . Till exempel:

Mnemonics

Mnemonics används ofta för att hjälpa eleverna komma ihåg reglerna, med de första bokstäverna i ord som representerar olika operationer. Olika mnemonics används i olika länder.

  • I USA och i Frankrike är förkortningen PEMDAS vanlig. Det står för parenteser , exponenter , multiplikation / division , addering / subtraktion . PEMDAS utökas ofta till minnesmärket " Snälla ursäkta min kära faster Sally " i skolor.
  • Kanada och Nya Zeeland använder BEDMAS , som står för B- racketar, E xponenter, Division / Multiplication , A ddition/ Subtraktion .
  • Vanligast i Storbritannien , Pakistan, Indien, Bangladesh och Australien och vissa andra engelsktalande länder är BODMAS som betyder antingen B racketar, O rder, Division / Multiplication, A addtion / Subtraktion eller B rackets, O f, D ivision / Multiplikation , Tillägg / Subtraktion . Nigeria och några andra västafrikanska länder använder också BODMAS. På liknande sätt i Storbritannien används BIDMAS , som står för B rackets, I ndices, Division / M ultiplication, A ddition/ Subtraktion .

Dessa mnemonics kan vara vilseledande när de skrivs på detta sätt. Om du till exempel misstolkar någon av reglerna ovan så att den betyder "addition först, subtraktion efteråt" skulle uttrycket utvärderas felaktigt

"Addition/subtraktion" i mnemonics ska tolkas som att eventuella tillägg och subtraktioner ska utföras i ordning från vänster till höger. På liknande sätt kan uttrycket a ÷ b × c läsas på flera sätt, men "Multiplication/Division" i mnemnonic betyder att multiplikationerna och divisionerna ska utföras från vänster till höger.

Ytterligare tvetydigheter som orsakas av användningen av multiplikation genom sammanställning och användning av snedstreck för att representera division diskuteras nedan . I allmänhet är det säkraste sättet att undvika oklarheter att använda parenteser.

Speciella fall

Seriell exponentiering

Om exponentiering indikeras av staplade symboler med upphöjd notation, är den vanliga regeln att arbeta uppifrån och ner:

a b c = a ( b c )

vilket vanligtvis inte är lika med ( a b ) c . Denna konvention är användbar eftersom det finns en egenskap för exponentiering som ( a b ) c = a bc , så det är onödigt att använda seriell exponentiering för detta.

Men när du använder operatornotation med en indikator (^) eller pil (↑), finns det ingen gemensam standard. Till exempel, Microsoft Excel och beräkningsprogrammeringsspråket MATLAB utvärderar a ^ b ^ c som ( a b ) c , men Google Search och Wolfram Alpha som a ( b c ) . Sålunda utvärderas 4^3^2 till 4 096 i det första fallet och till 262 144 i det andra fallet.

Unärt minustecken

Det finns olika konventioner om den unära operatorn − (läses vanligtvis "minus"). I skriven eller tryckt matematik tolkas uttrycket −3 2 till att betyda −(3 2 ) = −9 .

I vissa applikationer och programmeringsspråk, särskilt Microsoft Excel , PlanMaker (och andra kalkylprogram) och programmeringsspråket bc , har unära operatorer högre prioritet än binära operatorer, det vill säga den unära minus har högre prioritet än exponentiering, så i dessa språk −3 2 kommer att tolkas som (−3) 2 = 9 . Detta gäller inte för den binära minusoperatorn −; till exempel i Microsoft Excel medan formlerna =−2^2 , =-(2)^2 och =0+−2^2 returnerar 4, formeln =0−2^2 och =−(2^2) returnerar − 4.

Blandad division och multiplikation

I en del av den akademiska litteraturen tolkas multiplikation betecknad med juxtaposition (även känd som implicit multiplikation ) som att ha högre prioritet än division, så att 1 ÷ 2 n är lika med 1 ÷ (2 n ) , inte (1 ÷ 2) n . Till exempel anger manuskriptinlämningsinstruktionerna för Physical Review -tidskrifterna att multiplikation har högre företräde än division, och detta är också den konvention som observeras i framstående fysikläroböcker som Course of Theoretical Physics av ​​Landau och Lifshitz och Feynman Lectures on Physics .

Denna tvetydighet utnyttjas ofta i internetmemes som " 8÷2(2+2) ", för vilka det finns två motstridiga tolkningar: 8÷[2(2+2)] = 1 och [8÷2](2+ 2) = 16.

Tvetydighet kan också orsakas av användningen av snedstrecksymbolen , '/', för division. Instruktionerna för inlämning av fysisk granskning föreslår att man undviker uttryck av formen a/b/c; tvetydighet kan undvikas genom att istället skriva (a/b)/c eller a/(b/c).

Miniräknare

Olika miniräknare följer olika ordningsföljder. Många enkla miniräknare utan stack implementerar kedjeinmatning som arbetar från vänster till höger utan prioritet till olika operatörer, till exempel att skriva

1 + 2 × 3 ger 9,

medan mer sofistikerade miniräknare kommer att använda en mer standardprioritet, till exempel att skriva

1 + 2 × 3 ger 7.

Microsoft Calculator- programmet använder det förra i sin standardvy och det senare i sina vetenskapliga och programmeringsvyer.

Kedjeinmatning förväntar sig två operander och en operatör. När nästa operator trycks in, utvärderas uttrycket omedelbart och svaret blir vänster hand för nästa operator. Avancerade miniräknare tillåter inmatning av hela uttrycket, grupperat efter behov, och utvärderas endast när användaren använder likhetstecknet.

Miniräknare kan associera exponenter till vänster eller höger. Till exempel tolkas uttrycket a ^ b ^ c som a ( b c ) TI-92 och TI-30XS MultiView i "Mathprint-läge", medan det tolkas som ( a b ) c TI-30XII och TI-30XS MultiView i "Klassiskt läge".

Ett uttryck som 1/2 x tolkas som 1/(2 x ) av TI-82 , såväl som många moderna Casio- räknare, men som (1/2) x av TI-83 och varannan TI-räknare som släppts sedan 1996, samt av alla Hewlett-Packard- räknare med algebraisk notation. Även om den första tolkningen kan förväntas av vissa användare på grund av arten av implicit multiplikation , är den senare mer i linje med regeln att multiplikation och division har samma prioritet.

När användaren är osäker på hur en miniräknare kommer att tolka ett uttryck, kan parenteser användas för att ta bort oklarheten.

Operationsordning uppstod på grund av anpassningen av infixnotation i standard matematisk notation , som kan vara notationsmässigt tvetydig utan sådana konventioner, i motsats till postfixnotation eller prefixnotation , som inte behöver operationsordningar. Därför behöver räknare som använder omvänd polsk notation (RPN) som använder en stack för att mata in uttryck i korrekt prioritetsordning inte parenteser eller någon modellspecifik exekveringsordning.

Programmeringsspråk

Vissa programmeringsspråk använder prioritetsnivåer som överensstämmer med den ordning som vanligtvis används i matematik, även om andra, som APL , Smalltalk , Occam och Mary , inte har några regler för operatörspreferens (i APL är utvärdering strikt höger till vänster; i Smalltalk är det strikt från vänster till höger).

Dessutom, eftersom många operatorer inte är associativa, definieras ordningen inom en enskild nivå vanligtvis genom att gruppera vänster till höger så att 16/4/4 tolkas som (16/4)/4 = 1 snarare än 16/(4/4) ) = 16 ; sådana operatörer hänvisas till som "vänsterassociativa". Undantag finns; till exempel, språk med operatorer som motsvarar nackdelar på listor gör att de vanligtvis grupperas höger till vänster ("högerassociativ"), t.ex. i Haskell , 1:2:3:4:[] == 1:(2:(3) :(4:[]))) == [1,2,3,4] .

Dennis Ritchie , skapare av C-språket , har sagt om företrädet i C (delat av programmeringsspråk som lånar dessa regler från C, till exempel C++ , Perl och PHP ) att det hade varit att föredra att flytta de bitvisa operatorerna ovanför jämförelseoperatörer . Många programmerare har vant sig vid denna ordning, men senare populära språk som Python och Ruby har denna ordning omvänd. [ citat behövs ] De relativa prioritetsnivåerna för operatorer som finns i många C-språk är följande:

1 () [] -> . :: Funktionsanrop, scope, array/medlemsåtkomst
2   ! ~ - + * & storlek på typ cast ++ -- (de flesta) unära operatorer, storlek på och typ av kast (höger till vänster)
3 * / % MOD Multiplikation, division, modulo
4 + - Addition och subtraktion
5 << >> Växla bitvis åt vänster och höger
6 < <= > >= Jämförelser: mindre-än och större-än
7 == != Jämförelser: lika och inte lika
8 & Bitvis OCH
9 ^ Bitvis exklusivt ELLER (XOR)
10 | Bitvis inklusive (normal) ELLER
11 && Logisk OCH
12 || Logisk ELLER
13 ? : Villkorligt uttryck (ternärt)
14 = += -= *= /= %= &= |= ^= <<= >>= Tilldelningsoperatörer (höger till vänster)
15 , Kommaoperator

Exempel: (Obs: i exemplen nedan används '≡' för att betyda "är identisk med" och ska inte tolkas som en faktisk tilldelningsoperator som används som en del av exempeluttrycket.)

  • !A + !B (!A) + (!B)
  • ++A + !B (++A) + (!B)
  • A + B * C A + (B * C)
  • A || B && C A || (FÖRE KRISTUS)
  • A && B == C A && (B == C)
  • A & B == C A & (B == C)

(I Python , Ruby , PARI/GP och andra populära språk, A & B == C (A & B) == C .)

Källa-till-källa-kompilatorer som kompilerar till flera språk måste uttryckligen hantera frågan om olika ordningsföljder för operationer på olika språk. Haxe standardiserar till exempel ordern och upprätthåller den genom att sätta in parenteser där det är lämpligt.

Noggrannheten i mjukvaruutvecklares kunskap om binära operatörers företräde har visat sig följa deras förekomstfrekvens i källkoden.

Se även

Förklarande anteckningar

Vidare läsning