Kolejność operacji - Order of operations

W matematyce i programowaniu komputerowym The kolejność operacji (lub pierwszeństwa operatora ) jest zbiorem zasad, które odzwierciedlają konwencje o których procedury, aby wykonać pierwszy aby ocenić daną wyrażenie matematyczne .

Na przykład w matematyce i większości języków komputerowych mnożenie ma wyższy priorytet niż dodawanie i tak jest od czasu wprowadzenia nowoczesnej notacji algebraicznej . Zatem wyrażenie 1 + 2 × 3 jest interpretowane jako ma wartość 1 + (2 × 3) = 7 , a nie (1 + 2) × 3 = 9 . Kiedy wykładniki zostały wprowadzone w XVI i XVII wieku, miały one pierwszeństwo przed dodawaniem i mnożeniem i mogły być umieszczane tylko jako indeks górny po prawej stronie ich podstawy. Zatem 3 + 5 2 = 28 i 3 × 5 2 = 75 .

Konwencje te istnieją w celu wyeliminowania niejednoznaczności w zapisie, przy jednoczesnym umożliwieniu jak najkrótszej notacji. Tam, gdzie pożądane jest pominięcie konwencji pierwszeństwa lub nawet po prostu ich podkreślenie, można użyć nawiasów ( ) do wskazania alternatywnej kolejności operacji (lub po prostu do wzmocnienia domyślnej kolejności operacji). Na przykład (2 + 3) × 4 = 20 wymusza dodanie przed mnożeniem, podczas gdy (3 + 5) 2 = 64 wymusza dodanie przed potęgowaniem . Jeśli w wyrażeniu matematycznym wymaganych jest wiele par nawiasów (tak jak w przypadku nawiasów zagnieżdżonych), nawiasy można zastąpić nawiasami lub klamrami, aby uniknąć pomyłek, jak w [2 × (3 + 4)] - 5 = 9 .

Definicja

Kolejność operacji, która jest używana w matematyce, nauce, technologii i wielu językach programowania komputerowego , jest wyrażona tutaj:

  1. potęgowanie i ekstrakcja korzeni
  2. mnożenie i dzielenie
  3. dodawanie i odejmowanie

Oznacza to, że jeśli w wyrażeniu matematycznym między dwoma operatorami pojawia się podwyrażenie, najpierw należy zastosować operator , który znajduje się wyżej na powyższej liście.

Te przemienne i asocjacyjne prawa dodawania i mnożenia umożliwiają dodawanie terminów w dowolnej kolejności, a mnożenie czynników w żadnej operacji porządkowych, ale mieszanych musi przestrzegać standardową kolejność operacji.

W niektórych kontekstach pomocne jest zastąpienie dzielenia przez mnożenie przez odwrotność (odwrotność mnożenia) i odejmowanie przez dodanie liczby przeciwnej (odwrotność dodawania). Na przykład w algebrze komputerowej pozwala to na obsługę mniejszej liczby operacji binarnych i ułatwia używanie przemienności i asocjatywności podczas upraszczania dużych wyrażeń (więcej informacji w rozdziale Algebra komputerowa § Uproszczenie ). Zatem 3 ÷ 4 = 3 × 1/4; innymi słowy, iloraz 3 i 4 jest równy iloczynowi 3 i1/4. Również 3 − 4 = 3 + (−4) ; innymi słowy różnica 3 i 4 równa się sumie 3 i -4. Zatem 1 − 3 + 7 można traktować jako sumę 1 + (−3) + 7 , a trzy sumy można dodawać w dowolnej kolejności, we wszystkich przypadkach dając jako wynik 5.

Symbol rdzenia √ jest tradycyjnie przedłużany przez kreskę ( zwaną vinculum ) nad radicandą (pozwala to uniknąć konieczności umieszczania nawiasów wokół radicandu). Inne funkcje używają nawiasów wokół danych wejściowych, aby uniknąć niejednoznaczności. Nawiasy może być pominięty, jeśli sygnał wejściowy jest pojedynczą zmienną liczbową lub stałe (jak w przypadku sin x = sin ( x ) i sin gatunku = sin (n) . Inna konwencja skrót, który jest często stosowany jest wtedy, gdy wejście jest Jednomian ; zatem sin 3 x = sin(3 x ) zamiast (sin(3))  x , ale sin x + y = sin( x ) + y , ponieważ x + y nie jest jednomianem. Jest to jednak niejednoznaczne i nie są powszechnie rozumiane poza konkretnymi kontekstami.Niektóre kalkulatory i języki programowania wymagają nawiasów wokół danych wejściowych funkcji, inne nie.

Symbole grupowania mogą być użyte do zastąpienia zwykłej kolejności operacji. Zgrupowane symbole można traktować jako pojedyncze wyrażenie. Symbole grupowania można usuwać za pomocą praw asocjacyjnych i rozdzielczych , a także można je usunąć, jeśli wyrażenie wewnątrz symbolu grupowania jest na tyle uproszczone, aby z ich usunięcia nie wynikała żadna niejasność.

Przykłady

Pozioma linia ułamkowa działa również jako symbol grupowania:

Dla ułatwienia czytania inne symbole grupujące, takie jak nawiasy klamrowe { } lub nawiasy kwadratowe [ ] , są często używane wraz z nawiasami ( ) . Na przykład:

Mnemonika

Mnemoniki są często używane, aby pomóc uczniom zapamiętać zasady, zawierające pierwsze litery słów reprezentujących różne operacje. W różnych krajach używane są różne mnemoniki.

  • W Stanach Zjednoczonych akronim PEMDAS jest powszechny. To oznacza P arentheses, E xponents, M ultiplication / D ivision, ddition / S ubtraction. PEMDAS jest często rozszerzany w szkołach na mnemonik „ Proszę wybaczyć moją kochaną ciocię Sally ”.
  • Kanada i Nowej Zelandii zastosowanie BEDMAS , stojących na B rakiety, E xponents, D ivision / M ultiplication, ddition / S ubtraction.
  • Najczęściej w Wielkiej Brytanii, Pakistanie, Indiach, Bangladeszu i Australii i innych krajach anglojęzycznych jest BODMAS oznacza albo B Rakietki, O rder, D ivision / M ultiplication, ddition / S ubtraction lub B rakiety, O f / D ivision / M ultiplication, ddition / S ubtraction. Nigeria i niektóre inne kraje Afryki Zachodniej również używają BODMAS. Podobnie w Wielkiej Brytanii, BIDMAS także stosować stały dla B rakiety, że ndices, D ivision / M ultiplication, ddition / S ubtraction.

Te mnemoniki mogą wprowadzać w błąd, gdy są pisane w ten sposób. Na przykład błędna interpretacja którejkolwiek z powyższych reguł jako oznaczającej „najpierw dodawanie, potem odejmowanie” spowoduje niepoprawną ocenę wyrażenia

Podczas oceny wyrażeń zawierających tylko dodawanie i odejmowanie, takich jak powyższe wyrażenie, dodawanie i odejmowanie można wykonywać sekwencyjnie, działając od lewej do prawej, ale z sześciu głównych operacji arytmetycznych tylko dodawanie i mnożenie są przemienne i kojarzone, więc profesjonaliści zwykle zobacz odejmowanie, zwłaszcza w algebrze i matematyce wyższej, jako dodawanie liczby ujemnej. Poprawną odpowiedź da praca od lewej do prawej lub potraktowanie odejmowania jako dodawania liczby ze znakiem ; wykonanie odejmowania w złej kolejności spowoduje błędną odpowiedź. Mnemoniki nie odzwierciedlają grupowania przez dodawanie/odejmowanie lub mnożenie/dzielenie, więc ich użycie może spowodować to nieporozumienie.

Podobna niejednoznaczność występuje w przypadku dzielenia szeregowego, np. wyrażenie a÷b÷c×d można odczytywać na wiele sposobów, ale nie zawsze prowadzą one do tej samej odpowiedzi. Na przykład 3 ÷ 1/2 oceniane od lewej do prawej to trzy podzielone przez jeden równa się trzy, podzielone przez dwa równa się trzy połowy, ale użycie dzielenia jako mnożenia przez odwrotność daje trzy podzielone przez jedną połowę równa się trzy pomnożone przez dwa równa się sześć . Istnieją trzy możliwości, żadna powszechnie nie została uzgodniona. Każdy z kilku różnych symboli podziału musi mieć skomplikowane zasady pierwszeństwa lub imitujący zasadę odejmowania jako dodawania przeciwnego, dzielenie można zdefiniować jako mnożenie przez odwrotność lub można użyć nawiasów, aby uniknąć niejednoznaczności.

Ponieważ jest to kontrowersyjne, podsumowujemy powyższe:

Pierwsza zasada mówi, że jeśli jest wiele działek w rzędzie, kolejność obliczeń może przebiegać od lewej do prawej:

Ale to nie jest powszechnie akceptowane.

Druga zasada, traktowanie dzielenia jako mnożenia przez odwrotność, znacznie zmniejsza częstość dzielenia niejednoznacznego.

Ale jedynym pewnym sposobem na uniknięcie niejednoznaczności jest użycie nawiasów.

Przypadki specjalne

Potęgowanie szeregowe

Jeśli potęgowanie jest wskazywane przez symbole ułożone w stos przy użyciu notacji w indeksie górnym, zwykłą zasadą jest działanie od góry do dołu:

a b c = a ( b c )

co zwykle nie jest równe ( a b ) c . Ta konwencja jest użyteczna, ponieważ istnieje właściwość potęgowania, która ( a b ) c = a bc , więc nie ma potrzeby używania do tego potęgowania szeregowego.

Jednak w przypadku używania notacji operatorskiej z karetką (^) lub strzałką (↑) nie ma wspólnego standardu. Na przykład Microsoft Excel i język programowania obliczeniowego MATLAB oceniają jako ( a b ) c , ale Google Search i Wolfram Alpha jako a ( b c ) . Ocenia się więc na 4096 w pierwszym przypadku i 262.144 w drugim przypadku. a^b^c4^3^2

Jednoargumentowy znak minus

Istnieją różne konwencje dotyczące operatora jednoargumentowego − (zwykle czytane "minus"). W matematyce pisanej lub drukowanej wyrażenie −3 2 jest interpretowane jako −(3 2 ) = − 9 .

W niektórych aplikacjach i językach programowania, zwłaszcza Microsoft Excel , PlanMaker (i innych aplikacjach arkuszy kalkulacyjnych) oraz w języku programowania bc , operatory jednoargumentowe mają wyższy priorytet niż operatory binarne, to znaczy, że minus jednoargumentowy ma wyższy priorytet niż potęgowanie, więc w tych językach -3 2 będzie interpretowane jako (-3) 2 = 9 . Nie dotyczy to operatora binarnego minus −; na przykład w programie Microsoft Excel, podczas gdy preparaty =−2^2, =-(2)^2i =0+−2^2powrót 4, wzór =0−2^2i =−(2^2)powrotne -4.

Mieszane dzielenie i mnożenie

Podobnie, niejednoznaczne może być użycie symbolu ukośnika / w wyrażeniach takich jak 1/2 n . Jeśli przepiszemy to wyrażenie jako 1 ÷ 2 n, a następnie zinterpretujemy symbol dzielenia jako wskazujący mnożenie przez odwrotność, otrzymujemy:

1 ÷ 2 × n = 1 ×1/2× n =1/2× n .

Przy takiej interpretacji 1 ÷ 2 n jest równe (1 ÷ 2) n . Jednak w części literatury naukowej mnożenie oznaczane przez zestawienie (znane również jako mnożenie dorozumiane ) jest interpretowane jako mające wyższy priorytet niż dzielenie, tak że 1 ÷ 2 n równa się 1 ÷ (2 n ) , a nie (1 ÷ 2) n . Na przykład, rękopis instrukcje składania dla fizycznego przeglądu stanu czasopismach że mnożenie ma wyższy priorytet niż podziału z kreską, a to jest również konwencja obserwowane w znanych podręcznikach fizyki, takich jak kurs Fizyki Teoretycznej przez Landau i Lifshitz i Feynman Wykłady z fizyki .

Kalkulatory

Różne kalkulatory wykonują różne czynności. Wiele prostych kalkulatorów bez stosu wprowadza łańcuchowe wprowadzanie danych od lewej do prawej bez żadnego priorytetu dla różnych operatorów, na przykład pisania

1 + 2 × 3 daje 9,

podczas gdy bardziej wyrafinowane kalkulatory będą używać bardziej standardowego priorytetu, na przykład pisania

1 + 2 × 3 daje 7.

Program Microsoft Calculator używa tego pierwszego w widoku standardowym, a drugiego w widokach naukowych i programistycznych.

Wejście łańcuchowe oczekuje dwóch operandów i operatora. Po naciśnięciu następnego operatora wyrażenie jest natychmiast oceniane, a odpowiedź staje się lewą ręką następnego operatora. Zaawansowane kalkulatory pozwalają na wprowadzenie całego wyrażenia, pogrupowanego w razie potrzeby i oblicza się tylko wtedy, gdy użytkownik użyje znaku równości.

Kalkulatory mogą kojarzyć wykładniki od lewej do prawej. Na przykład wyrażenie jest interpretowane jako a ( b c ) w kalkulatorach TI-92 i TI-30XS MultiView w „trybie Mathprint”, podczas gdy w kalkulatorach TI-30XII i TI-30XS jest interpretowane jako ( a b ) c MultiView w „trybie klasycznym”. a^b^c

Wyrażenie takie jest interpretowane jako 1/(2 x ) przez TI-82 , a także przez wiele nowoczesnych kalkulatorów Casio , ale jako (1/2) x przez TI-83 i każdy inny kalkulator TI wydany od 1996 roku, a także przez wszystkie kalkulatory firmy Hewlett-Packard z notacją algebraiczną. Podczas gdy pierwsza interpretacja może być oczekiwana przez niektórych użytkowników ze względu na charakter domniemanego mnożenia , ta druga jest bardziej zgodna ze standardową zasadą, że mnożenie i dzielenie mają równe pierwszeństwo, gdzie 1/2 x jest czytane przez jeden podzielone przez dwa, a odpowiedź pomnożona przez x . 1/2x

Gdy użytkownik nie jest pewien, jak kalkulator zinterpretuje wyrażenie, dobrym pomysłem jest użycie nawiasów, aby nie było niejasności.

Kalkulatory korzystające z odwróconej notacji polskiej (RPN), znanej również jako notacja postfiksowa, używają stosu do wprowadzania wyrażeń we właściwej kolejności bez potrzeby stosowania nawiasów lub jakiejkolwiek kolejności wykonania zależnej od modelu.

Języki programowania

Niektóre języki programowania używają poziomów pierwszeństwa, które są zgodne z kolejnością powszechnie używaną w matematyce, chociaż inne, takie jak APL , Smalltalk , Occam i Mary , nie mają reguł pierwszeństwa operatorów (w APL ocena jest ściśle od prawej do lewej; w Smalltalk jest to ściśle od lewej do prawej).

Ponadto, ponieważ wiele operatorów nie jest asocjacyjnych, kolejność w obrębie dowolnego pojedynczego poziomu jest zwykle definiowana przez grupowanie od lewej do prawej, co 16/4/4jest interpretowane jako (16/4)/4 = 1 zamiast 16/(4/4) = 16 ; takie operatory są być może myląco określane jako „lewo asocjacyjne”. Istnieją wyjątki; na przykład języki z operatorami odpowiadającymi operacji cons na listach zwykle grupują je od prawej do lewej ("right asociative"), np. w Haskell , 1:2:3:4:[] == 1:(2:(3:(4:[]))) == [1,2,3,4].

Twórca w języku C powiedział z pierwszeństwa w C (udostępnionego przez języki programowania, które pożyczyć te zasady z C, na przykład C ++ , Perl i PHP ), które byłoby korzystne, aby przenieść operatory bitowe powyżej operatorów porównania . Jednak wielu programistów przyzwyczaiło się do tego porządku. Względne poziomy pierwszeństwa operatorów występujące w wielu językach w stylu C są następujące:

1 () [] -> . :: Wywołanie funkcji, zakres, dostęp do tablicy/członków
2 ! ~ - + * &   rozmiarrodzaju   rzutu   ++ --   (większość) jednoargumentowe operatory, rzuty rozmiaru i typu (od prawej do lewej)
3 * / % MOD Mnożenie, dzielenie, modulo
4 + - Dodawanie i odejmowanie
5 << >> Przesunięcie bitowe w lewo i w prawo
6 < <= > >= Porównania: mniejsze niż i większe niż
7 == != Porównania: równe i nie równe
8 & Bitowe AND
9 ^ Bitowe wyłączne OR (XOR)
10 | Bitowe inkluzywne (normalne) OR
11 && Logiczne AND
12 || Logiczne OR
13 ? : Wyrażenie warunkowe (trójskładnikowe)
14 = += -= *= /= %= &= |= ^= <<= >>= Operatory przypisania (od prawej do lewej)
15 , Operator przecinka

Przykłady: (Uwaga: w poniższych przykładach „≡” oznacza „jest równoważne” i nie należy go interpretować jako rzeczywisty operator przypisania używany jako część przykładowego wyrażenia).

  • !A + !B(!A) + (!B)
  • ++A + !B(++A) + (!B)
  • A + B * CA + (B * C)
  • A || B && CA || (B && C)
  • A && B == CA && (B == C)
  • A & B == CA & (B == C)

Kompilatory źródło-źródło, które kompilują się do wielu języków, muszą wyraźnie radzić sobie z problemem różnej kolejności operacji w różnych językach. Haxe na przykład standaryzuje nakaz i egzekwuje go, wstawiając nawiasy tam, gdzie jest to właściwe.

Stwierdzono, że dokładność wiedzy programistów na temat pierwszeństwa operatorów binarnych ściśle odzwierciedla ich częstotliwość występowania w kodzie źródłowym.

Zobacz też

Uwagi

Bibliografia

Dalsza lektura