Черговість операцій

сприймається одним калькулятором як , а іншим як

У математиці та програмуванні, черговість операцій — правила, які використовують для однозначного трактування порядку виконання операцій в даному математичному виразі.

Наприклад, в математиці та більшості комп'ютерних мов множення виконується раніше ніж додавання; у виразі 2 + 3 × 4, відповідь 14. Дужки, які мають свої власні правила, можуть бути використані для уникнення плутанини, тож попередній вираз може бути записаний як 2 + (3 × 4), але тут дужки необов'язкові, бо множення першочергове.

В сучасній формі алгебраїчного запису, де безпосереднє сусідство змінних позначає множення, множення має першочерговість порівняно з додаванням, з якого боку воно б не з'являлось.[1] Тож 3 + 4 × 5 = 4 × 5 + 3 = 23.

Коли піднесення до степеня було вперше введено в XVI і XVII сторіччях, воно отримало старшинство над множенням і додаванням, а показник степеня може знаходитись лише як правий надрядковий індекс бази. Тож 3 + 52 = 28 and 3 × 52 = 75. Якщо потрібно замінити правила пріоритету або навіть просто підкреслити їх, можна використовувати круглі дужки ( ). Наприклад, (2 + 3) × 4 = 20 змушує додавання передувати множенню, а (3 + 5) 2 = 64 змушує додавання передувати піднесенню до степеня . Якщо в математичному виразі потрібно кілька пар дужок (наприклад, у випадку вкладених дужок), дужки можна замінити іншими типами дужок , щоб уникнути плутанини, як у [2 × (3 + 4)] − 5 = 9 .

Ці правила мають сенс лише тоді, коли використовується звичайна нотація (інфіксна нотація). Якщо для всіх операцій використовується функціональна або польська нотація , порядок операцій випливає з самої нотації.

Традиційна черговість операцій

Порядок операцій, тобто порядок, у якому зазвичай виконуються операції у виразі, є результатом певних домовленостей, прийнятих в математиці, науці, техніці та багатьох мовах комп’ютерного програмування. Операції у виразах виконуються таким чином(за їх наявності):

  1. Дії в дужках
  2. Піднесення до степеня
  3. Множення і ділення
  4. Додавання і віднімання

Це означає, що для обчислення виразу спочатку обчислюється будь-який підвираз у дужках, опрацьовуючи їх зсередини назовні, якщо існує більше одного набору дужок. Незалежно від того, в дужках вони чи ні, першою слід виконувати операцію, яка стоїть вище у списку вище. Операції з однаковим пріоритетом традиційно виконуються зліва направо.

Як правило, кожну операцію ділення можна замінити множенням на число, обернене дільнику, тому асоціативний і комутативний закони множення дозволяють множити будь-якому порядку. Іноді множенню та діленню надається рівний пріоритет, а іноді множенню надається більший пріоритет, ніж діленню; дивіться Змішане ділення та множення нижче. Оскільки кожне віднімання можна замінити додаванням протилежного, то асоціативний і комутативний закони додавання дозволяють додавати доданки в будь-якому порядку.

Символ радикалу​ ⁠ традиційно подовжується лінією (vinculum) над підкореневим виразом (це дозволяє уникнути необхідності в дужках навколо підкореневого виразу). Алгебраїчні та тригонометричні функції використовують дужки навколо аргументу, щоб уникнути неоднозначності[2][3].  ​​Дужки в аргументах функцій можна опустити, якщо аргумент є однією числовою змінною або константою,  як у випадку sin x = sin( x ) і sin π = sin(π) . Це поширюється і на одночлени: sin 3 x = sin(3 x ) і навіть sin ⁠1/2⁠ xy = sin( xy /2) , але sin x + y = sin( x ) + y , оскільки x + y не є одночленом. Такий запис не є загальнообов'язковим, і деякі автори віддають перевагу явним дужкам. Деякі калькулятори та мови програмування вимагають круглих дужок навколо аргументів функцій, а деякі ні.

Символи групування(дужки та лінії) можна використовувати для перевизначення звичайного порядку операцій[4].  Згруповані символи можна розглядати як один вираз.

Приклади

Множення перед додаванням:

Підвирази в круглих дужках обчислюються спочатку:

Піднесення до степеня перед множенням, множення перед відніманням:

Коли вираз записується як верхній індекс, верхній індекс вважається згрупованим за його позицією над основою:

Операнд підкореневого виразу обмежується верхньою лінією:

Символом групування також виступає горизонтальна дробова лінія:

Дужки можуть бути вкладеними, і їх слід опрацьовувати зсередини назовні. Для кращого розрізнення зовнішні дужки можна зробити більшими за внутрішні. Крім того, можна використати інші символи групування, такі як фігурні дужки { } або квадратні дужки [ ], іноді вони використовуються разом із круглими дужками ( ) . Наприклад:

Особливі випадки

Унарний знак мінус

Існують різні угоди щодо унарної операції  «−» (мінус). На письмі або друкованих працях вираз −3 2 інтерпретується як −(3 2 ) = −9 [5].

У деяких програмах і мовах програмування, зокрема Microsoft Excel, PlanMaker (та інших програмах для роботи з електронними таблицями) і мові програмування bc, унарні операції мають вищий пріоритет, ніж бінарні операції, тобто унарний мінус має більший пріоритет, ніж піднесення до степеня, тому в цих мовах −3 2 буде інтерпретовано як (−3) 2 = 9[6] .  Це не стосується бінарної операції мінус «-»; наприклад, у Microsoft Excel, формула =-2^2 повертає значення 4, але формула=-(2)^2=0+-2^2=0-2^2=-(2^2) поверне значення -4.

Змішане ділення і множення

Наразі немає універсальної угоди для інтерпретації виразу, який містить і ділення, позначене символом «:» (або символом «÷»), і множення, позначене символом «×» (або символом «·»). Як правило, такі операції мають однаковий пріоритет, і обчислення виконуються зліва направо, порядок дій завжди можна змінити використанням дужок.

За межами початкової освіти символ «:» для позначення ділення, використовується рідко, зазавичай його замінюють використанням алгебраїчних дробів[7], які записуються "вертикально", з чисельником над знаменником, що робить групування явним і однозначним, але іноді записується в рядку. використовуючи скісну риску - символ «/».

Множення, позначене зіставленням (відоме як неявне множення ), створює візуальний блок і має вищий пріоритет, ніж більшість інших операцій. У академічній літературі, коли вбудовані дроби поєднуються з неявним множенням без дужок, множення традиційно тлумачиться як таке, що має вищий пріоритет, ніж ділення, тобто 1 / 2 n інтерпретується як 1 / (2 ·  n ) , а не (1 / 2) ·  n[8] .  Наприклад, у вимогах щодо оформлення рукописів до журналу Physical Review прямо стверджується, що множення має пріоритет над діленням[9],  і це також умова, яка дотримується в підручниках з фізики, таких як Курс теоретичної фізики Ландау та Ліфшиця  та підручники з математики, такі як Конкретна математика Грема, Кнута та Паташника.  Однак деякі автори рекомендують не використовувати такі вирази, як a  /  bc , віддаючи перевагу явному використанню круглих дужок a  /( bc ) .

Більш складні випадки більш неоднозначні. Наприклад, позначення 1 / 2 π ( a  +  b ) може правдоподібно означати 1 / [2 π  · ( a  +  b )] або [1 / (2 π )] · ( a  +  b ) .  Іноді інтерпретація залежить від контексту. Інструкції щодо подання на Physical Review рекомендують не використовувати вирази у формі a  /  b  /  c , оскільки більш явні вирази ( a  /  b ) /  c або a  / ( b  /  c ) є однозначними.

Ця неоднозначність була предметом таких інтернет-мемів , як « 8 ÷ 2(2 + 2) », для яких існує дві суперечливі інтерпретації: 8 ÷ [2 · (2 ​​+ 2)] = 1 і (8 ÷ 2) · (2 + 2) = 16.

Послідовне піднесення до степеня

Якщо піднесення до степеня позначається складеними символами з використанням верхнього індексу, звичайним правилом є робота зверху вниз:

a b c = a ( b c )

яка зазвичай не дорівнює ( a b ) c . Ця угода є корисною, оскільки існує властивість зведення до степеня ( a b ) c = a bc , тому для цього немає потреби використовувати послідовне зведення до степеня.

Однак, коли піднесення до степеня представлено явним символом, таким як «^» або «↑», загального стандарту немає. Наприклад, Microsoft Excel і мова програмування обчислень MATLAB обраховують a^b^c як (ab)c , але Пошук Google і Wolfram Alpha - як a(bc). Таким чином, значення виразу 4^3^2 буде в 4 096 у першому випадку та в 262 144 у другому випадку.

Мови програмування

Більшість мов програмування використовують рівні пріоритету операцій, які відповідають порядку, який зазвичай використовується в математиці  хоча інші, такі як APL, Smalltalk, Occam і Mary, не мають правил пріоритету операторів (в APL дії виконуються строго справа наліво, у Smalltalk - строго зліва направо).

Крім того, оскільки багато операторів не є асоціативними, порядок в межах будь-якого окремого рівня зазвичай визначається групуванням зліва направо таким чином, що 16/4/4інтерпретується як (16/4)/4 = 1 , а не 16/(4/4) = 16, такі оператори називаються «лівоасоціативними». Існують винятки; наприклад, мови з операторами, що відповідають операції cons у списках, зазвичай роблять їх групуванням справа наліво («права асоціація»), наприклад, у Haskell , 1:2:3:4:[] == 1:(2:(3:(4:[]))) == [1,2,3,4].

Денніс Річі, творець мови C , сказав щодо пріоритету в C (спільного для мов програмування, які запозичили ці правила з C, наприклад, C++ , Perl і PHP ), що було б краще перемістити порозрядні оператори вище операторів порівняння. Багато програмістів звикли до цього порядку, але в останніх популярних мовах, таких як Python  і Ruby  цей порядок змінився.

У мові C++

Пріоритет Операція Асоціативність Опис
1 :: зліва направо
[ ] операція індексування
() круглі дужки
. звернення до члена структури чи класу
->
2 ++ зліва направо постфіксний інкремент
– – постфіксний декремент
3 ++ справа ліворуч префіксний інкремент
– – префіксний декремент
4 * зліва направо множення
/ ділення
% остача від ділення
5 + зліва направо додавання
віднімання
6 >> зліва направо зсув праворуч
<< зсув ліворуч
7 < зліва направо менше
<= менше або дорівнює
> більше
>= більше або дорівнює
8 == зліва направо дорівнює
!= не дорівнює
9 && зліва направо логічне І
10 || зліва направо логічне АБО
11 ?: справа ліворуч
12 = справа ліворуч присвоєння(надання значення)
*= множення з присвоєнням
/= ділення з присвоєнням
%= остача від ділення з присвоєнням
+= додавання з присвоєнням
-= віднімання з присвоєнням
13 , зліва направо кома

У сумнівних випадках слід використовувати дужки.

Примітки

  1. Математичний форум. Архів оригіналу за 21 квітня 2021. Процитовано 31 травня 2011.
  2. Oldham, Keith B.; Myland, Jan C.; Spanier, Jerome (2009). An atlas of functions: with Equator, the atlas function calculator (вид. 2nd ed). New York, NY: Springer. ISBN 978-0-387-48806-6.
  3. National Institute of Standards and Technology (2010). Olver, Frank W. J.; Lozier, Daniel W.; Boisvert, Ronald F.; Clark, Charles W. (ред.). NIST handbook of mathematical functions. Cambridge New York Melbourne: Cambridge University Press. ISBN 978-0-521-19225-5.
  4. Bronštejn, Ilʹja N.; Semendjaev, Konstantin A. (1991). Taschenbuch der Mathematik. 1,25: Taschenbuch der Mathematik: [Hauptbd.] (вид. 25. durchges. Aufl). Thun Frankfurt/Main: Deutsch. ISBN 978-3-87144-492-0.
  5. Angel, Allen R.; Runde, Dennis C.; Gilligan, Lawrence; Semmler, Richard (2010). Elementary Algebra for College Students (8th ed.). Prentice Hall. с. Ch. 1, §9, Objective 3. ISBN 978-0-321-62093-4.
  6. Microsoft (15 серпня 2005). Formula Returns Unexpected Positive Value. Archived from the original on 2015-04-19. web.archive.org. Процитовано 2 січня 2025.
  7. Wu, Hung-Hsi ((2007) [2004]). "Order of operations" and other oddities in school mathematics" (PDF). Retrieved 2007-07-03 (PDF). Dept. of Mathematics, University of California.
  8. Lennes, N. J. (1917-02). Discussions: Relating to the Order of Operations in Algebra. The American Mathematical Monthly. Т. 24, № 2. с. 93. doi:10.2307/2972726. Процитовано 2 січня 2025.
  9. "Physical Review Style and Notation Guide" (PDF).§ IV.E.2.e. (PDF). American Physical Society. 2012.