Черговість операцій
У математиці та програмуванні, черговість операцій — правила, які використовують для однозначного трактування порядку виконання операцій в даному математичному виразі.
Наприклад, в математиці та більшості комп'ютерних мов множення виконується раніше ніж додавання; у виразі 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 .
Ці правила мають сенс лише тоді, коли використовується звичайна нотація (інфіксна нотація). Якщо для всіх операцій використовується функціональна або польська нотація , порядок операцій випливає з самої нотації.
Традиційна черговість операцій
Порядок операцій, тобто порядок, у якому зазвичай виконуються операції у виразі, є результатом певних домовленостей, прийнятих в математиці, науці, техніці та багатьох мовах комп’ютерного програмування. Операції у виразах виконуються таким чином(за їх наявності):
Це означає, що для обчислення виразу спочатку обчислюється будь-який підвираз у дужках, опрацьовуючи їх зсередини назовні, якщо існує більше одного набору дужок. Незалежно від того, в дужках вони чи ні, першою слід виконувати операцію, яка стоїть вище у списку вище. Операції з однаковим пріоритетом традиційно виконуються зліва направо.
Як правило, кожну операцію ділення можна замінити множенням на число, обернене дільнику, тому асоціативний і комутативний закони множення дозволяють множити будь-якому порядку. Іноді множенню та діленню надається рівний пріоритет, а іноді множенню надається більший пріоритет, ніж діленню; дивіться Змішане ділення та множення нижче. Оскільки кожне віднімання можна замінити додаванням протилежного, то асоціативний і комутативний закони додавання дозволяють додавати доданки в будь-якому порядку.
Символ радикалу традиційно подовжується лінією (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 | , | зліва направо | кома |
У сумнівних випадках слід використовувати дужки.
Примітки
- ↑ Математичний форум. Архів оригіналу за 21 квітня 2021. Процитовано 31 травня 2011.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ Microsoft (15 серпня 2005). Formula Returns Unexpected Positive Value. Archived from the original on 2015-04-19. web.archive.org. Процитовано 2 січня 2025.
- ↑ 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.
- ↑ 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.
- ↑ "Physical Review Style and Notation Guide" (PDF).§ IV.E.2.e. (PDF). American Physical Society. 2012.