В математике и программировании порядок операций представляет собой набор правил, отражающих соглашения о том, какие операции следует выполнять в первую очередь для оценки данного математического выражения .
Эти правила формализуются с помощью ранжирования операций. Ранг операции называется ее приоритетом , и операция с более высоким приоритетом выполняется перед операциями с более низким приоритетом. Калькуляторы обычно выполняют операции с одинаковым приоритетом слева направо, [1] но некоторые языки программирования и калькуляторы принимают другие соглашения.
Например, умножению предоставлен более высокий приоритет, чем сложению, и так было с момента введения современной алгебраической нотации . [2] [3] Таким образом, в выражении 1 + 2 × 3 умножение выполняется перед сложением, и выражение имеет значение 1 + (2 × 3) = 7 , а не (1 + 2) × 3 = 9. Когда в XVI и XVII веках были введены показатели степени, им был предоставлен приоритет как перед сложением, так и перед умножением, и они размещались в виде верхнего индекса справа от их основания. [2] Таким образом, 3 + 5 2 = 28 и 3 × 5 2 = 75 .
Эти соглашения существуют для того, чтобы избежать неоднозначности обозначений, позволяя при этом обозначениям оставаться краткими. [4] Если желательно переопределить соглашения о приоритетах или даже просто подчеркнуть их, можно использовать скобки ( ). Например, (2 + 3) × 4 = 20 заставляет сложение предшествовать умножению, в то время как (3 + 5) 2 = 64 заставляет сложение предшествовать возведению в степень . Если в математическом выражении требуется несколько пар скобок (например, в случае вложенных скобок), скобки можно заменить другими типами скобок , чтобы избежать путаницы, как в [2 × (3 + 4)] − 5 = 9 .
Эти правила имеют смысл только тогда, когда используется обычная нотация (называемая инфиксной нотацией ). Когда для всех операций используется функциональная или польская нотация , порядок операций вытекает из самой нотации.
Порядок операций, то есть порядок, в котором обычно выполняются операции в выражении, является результатом соглашения, принятого в математике, науке, технике и многих языках программирования . Он суммируется следующим образом: [2] [5]
Это означает, что для оценки выражения сначала оценивается любое подвыражение внутри скобок, работая изнутри наружу, если есть более одного набора. Независимо от того, внутри скобок или нет, операция, которая находится выше в приведенном выше списке, должна применяться первой. Операции с одинаковым приоритетом традиционно оцениваются слева направо.
Если каждое деление заменить умножением на обратную величину (мультипликативно-обратная величина), то ассоциативные и коммутативные законы умножения позволяют умножать множители в каждом члене в любом порядке. Иногда умножению и делению дается одинаковый приоритет, а иногда умножению дается более высокий приоритет, чем делению; см. § Смешанное деление и умножение ниже. Если каждое вычитание заменить сложением противоположной величины (аддитивно-обратная величина), то ассоциативные и коммутативные законы сложения позволяют складывать члены в любом порядке.
Корневой символ √ традиционно продлевается чертой (называемой винкулумом ) над подкоренным выражением (это позволяет избежать необходимости в скобках вокруг подкоренного выражения). Другие функции используют скобки вокруг входных данных, чтобы избежать двусмысленности. [6] [7] [a] Скобки можно опустить, если входные данные представляют собой одну числовую переменную или константу, [2] как в случае sin x = sin( x ) и sin π = sin(π) . [a] Традиционно это соглашение распространяется на одночлены ; таким образом, sin 3 x = sin(3 x ) и даже sin 1/2 xy = sin( xy /2) , но sin x + y = sin( x ) + y , поскольку x + y не является одночленом. Однако это соглашение не является общепринятым, и некоторые авторы предпочитают явные скобки. [b] Некоторые калькуляторы и языки программирования требуют скобок вокруг входных данных функции, некоторые — нет.
Символы группировки могут использоваться для переопределения обычного порядка операций. [2] Сгруппированные символы можно рассматривать как единое выражение. [2] Символы группировки могут быть удалены с использованием ассоциативных и дистрибутивных законов, также их можно удалить, если выражение внутри символа группировки достаточно упрощено, чтобы их удаление не приводило к двусмысленности.
Умножение перед сложением:
Сначала оцениваются подвыражения, заключенные в скобки:
Возведение в степень перед умножением, умножение перед вычитанием:
Если выражение записано в виде надстрочного индекса, то считается, что надстрочный индекс сгруппирован по положению над своим основанием:
Операнд символа корня определяется чертой сверху:
Горизонтальная дробная черта также выступает в качестве символа группировки:
Скобки могут быть вложенными и должны оцениваться изнутри наружу. Для удобства чтения внешние скобки можно сделать больше внутренних. В качестве альтернативы, другие символы группировки, такие как фигурные скобки { } или квадратные скобки [ ] , иногда используются вместе с круглыми скобками ( ) . Например:
Существуют различные соглашения относительно унарной операции '−' (обычно произносится как "минус"). В письменной или печатной математике выражение −3 2 интерпретируется как −(3 2 ) = −9 . [2] [8]
В некоторых приложениях и языках программирования, в частности, Microsoft Excel , PlanMaker (и других приложениях для работы с электронными таблицами) и языке программирования bc , унарные операции имеют более высокий приоритет, чем бинарные операции, то есть унарный минус имеет более высокий приоритет, чем возведение в степень, поэтому в этих языках −3 2 будет интерпретироваться как (−3) 2 = 9 . [9] Это не относится к операции бинарного минуса '−'; например, в Microsoft Excel, в то время как формулы =-2^2
, =-(2)^2
и =0+-2^2
возвращают 4, формулы =0-2^2
и =-(2^2)
возвращают −4.
Не существует универсального соглашения для интерпретации термина, содержащего как деление, обозначенное как «÷», так и умножение, обозначенное как «×». Предлагаемые соглашения включают назначение операциям одинакового приоритета и оценку их слева направо, или эквивалентную обработку деления как умножения на обратную величину, а затем оценку в любом порядке; [10] оценку всех умножений сначала с последующим делением слева направо; или избегание таких выражений и вместо этого всегда устранение их неоднозначности явными скобками. [11]
За пределами начального образования символ «÷» для деления используется редко, но заменяется использованием алгебраических дробей [12], обычно записываемых вертикально, с числителем, расположенным над знаменателем, что делает группировку явной и недвусмысленной, но иногда записываемых в строку с использованием символа косой черты или косой черты «/». [13]
Умножение, обозначенное сопоставлением (также известное как подразумеваемое умножение ), создает визуальную единицу и имеет более высокий приоритет, чем большинство других операций. В академической литературе, когда встроенные дроби объединяются с подразумеваемым умножением без явных скобок, умножение традиционно интерпретируется как имеющее более высокий приоритет, чем деление, так что, например, 1 / 2 n интерпретируется как означающее 1 / (2 · n ) , а не (1 / 2) · n . [2] [10] [14] [15] Например, инструкции по подаче рукописей в журналы Physical Review прямо указывают , что умножение имеет приоритет над делением, [16] и это также соглашение соблюдается в учебниках по физике , таких как Курс теоретической физики Ландау и Лифшица [c], и учебниках по математике, таких как Конкретная математика Грэма , Кнута и Паташника . [17] Однако некоторые авторы не рекомендуют использовать выражения типа a / bc , предпочитая явное использование скобок a / ( bc ) . [3]
Более сложные случаи более неоднозначны. Например, запись 1 / 2 π ( a + b ) может правдоподобно означать либо 1 / [2 π · ( a + b )] либо [1 / (2 π )] · ( a + b ) . [18] Иногда интерпретация зависит от контекста. Инструкции по подаче Physical Review не рекомендуют использовать выражения вида a / b / c ; более явные выражения ( a / b ) / c или a / ( b / c ) недвусмысленны. [16]
Эта двусмысленность стала предметом интернет-мемов , таких как « 8 ÷ 2(2 + 2) », для которого существуют две противоречивые интерпретации: 8 ÷ [2 · (2 + 2)] = 1 и (8 ÷ 2) · (2 + 2) = 16. [15] [19] Исследователь математического образования Хунг-Си Ву отмечает, что «в реальной жизни никогда не встретишь вычислений такого типа», и называет такие надуманные примеры «своего рода салонной игрой «Попался!», призванной заманить в ловушку ничего не подозревающего человека, сформулировав его в виде набора необоснованно запутанных правил». [12]
Если возведение в степень обозначено сложенными символами с использованием надстрочного обозначения, то обычное правило заключается в работе сверху вниз: [2] [7]
что обычно не равно ( a b ) c . Это соглашение полезно, поскольку существует свойство возведения в степень , что ( a b ) c = a bc , поэтому нет необходимости использовать последовательное возведение в степень для этого.
Однако, когда возведение в степень представлено явным символом, таким как каретка (^) или стрелка (↑), общего стандарта нет. Например, Microsoft Excel и язык программирования вычислений MATLAB оценивают как ( a b ) c , а Google Search и Wolfram Alpha как a ( b c ) . Таким образом, оценивается как 4096 в первом случае и как 262144 во втором случае.a^b^c
4^3^2
Мнемонические сокращения часто преподаются в начальных школах, чтобы помочь ученикам запомнить порядок действий. [20] [21] Аббревиатура PEMDAS , которая расшифровывается как Prentheses , E exponents, M ultiplication/ D ivision, Addition / S ubtraction, [22] распространена в Соединенных Штатах [23] и Франции. [24] Иногда буквы разворачиваются в слова мнемонического предложения, например «Please Excuse My Dear Aunt Sally». [25] Соединенное Королевство и другие страны Содружества могут использовать BODMAS (или иногда BOMDAS ), что расшифровывается как Brackets , O f, D ivision/ M ultiplication, Addition / S ubtraction, где «of» означает умножение дробей. [26] [27] Иногда вместо этого O расширяется до O rder, что означает показатель степени или корень, [27] [28] или заменяется на I для индексов I в альтернативной мнемонике BIDMAS . [27] [29] В Канаде и Новой Зеландии распространено BEDMAS . [30]
В Германии это правило преподается просто как Punktrechnung vor Strichrechnung , операции с точками предшествуют операциям с линиями, ссылаясь на графические формы изучаемых знаков операторов U+00B7 · ТОЧКА В СРЕДНЕМ ДЕЛЕ (умножение), U+2236 ∶ ОТНОШЕНИЕ (деление) и U+002B + ЗНАК ПЛЮС (сложение), U+2212 − ЗНАК МИНУС (вычитание).
Эти мнемоники могут вводить в заблуждение, если записаны таким образом. [25] Например, неверное толкование любого из вышеприведенных правил как «сначала сложение, потом вычитание» приведет к неправильной оценке выражения [25] как , тогда как правильная оценка — . Эти значения отличаются, когда .
Мнемонические аббревиатуры подвергались критике за то, что они не развивают концептуальное понимание порядка операций и не отвечают на вопросы студентов о его цели или гибкости. [31] [32] Студенты, изучающие порядок операций с помощью мнемонических аббревиатур, регулярно делают ошибки, [33] как и некоторые будущие учителя. [34] Даже когда студенты правильно изучают аббревиатуру, несоразмерное внимание к запоминанию мелочей вытесняет содержательное математическое содержание. [12] Процедурное применение аббревиатуры не соответствует интуитивному пониманию экспертами математической нотации: математическая нотация обозначает группировки способами, отличными от скобок или квадратных скобок, а математическое выражение представляет собой древовидную иерархию , а не линейно «упорядоченную» структуру; Более того, не существует единого порядка, в соответствии с которым математические выражения должны быть упрощены или оценены, и нет универсального канонического упрощения для любого конкретного выражения, и эксперты свободно применяют допустимые преобразования и замены в любом удобном порядке, поэтому изучение жесткой процедуры может привести студентов к вводящему в заблуждение и ограниченному пониманию математической нотации. [35]
Разные калькуляторы следуют разным порядкам операций. [2] Многие простые калькуляторы без стека реализуют цепочку ввода , работая в порядке нажатия кнопок без приоритета, заданного для различных операций, выдают результат, отличный от результата, выдаваемого более сложными калькуляторами. Например, на простом калькуляторе набор 1 + 2 × 3 =
дает 9, в то время как более сложный калькулятор будет использовать более стандартный приоритет, поэтому набор 1 + 2 × 3 =
дает 7.
Калькуляторы могут связывать экспоненты слева или справа. Например, выражение интерпретируется как a ( b c ) на TI-92 и TI-30XS MultiView в "режиме Mathprint", тогда как оно интерпретируется как ( a b ) c на TI-30XII и TI-30XS MultiView в "классическом режиме".a^b^c
Выражение типа интерпретируется как 1/(2 x ) калькулятором TI-82 [3] , а также многими современными калькуляторами Casio [36] (настраиваемыми на некоторых, например, fx-9750GIII ), но как (1/2) x калькулятором TI-83 и любым другим калькулятором TI, выпущенным с 1996 года [37] [3] , а также всеми калькуляторами Hewlett-Packard с алгебраической нотацией. Хотя первая интерпретация может быть ожидаема некоторыми пользователями из-за природы подразумеваемого умножения [38] , последняя больше соответствует правилу, что умножение и деление имеют равный приоритет. [3]1/2x
Когда пользователь не уверен, как калькулятор будет интерпретировать выражение, можно использовать скобки, чтобы устранить неоднозначность. [3]
Порядок операций возник из-за адаптации инфиксной нотации в стандартной математической нотации , которая может быть неоднозначной с точки зрения нотации без таких соглашений, в отличие от постфиксной нотации или префиксной нотации , которым не нужен порядок операций. [39] [40] Следовательно, калькуляторы, использующие обратную польскую нотацию (RPN) с использованием стека для ввода выражений в правильном порядке приоритета, не нуждаются в скобках или каком-либо возможном порядке выполнения, специфичном для модели. [25] [22]
Большинство языков программирования используют уровни приоритета, которые соответствуют порядку, обычно используемому в математике [41], хотя в других языках, таких как 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 ), что было бы предпочтительнее переместить побитовые операторы над операторами сравнения . [42] Многие программисты привыкли к такому порядку, но в более современных популярных языках, таких как Python [43] и Ruby [44], этот порядок действительно обратный. Относительные уровни приоритета операторов, встречающиеся во многих языках в стиле C, следующие:
Примеры:
!A + !B
интерпретируется как(!A) + (!B)
++A + !B
интерпретируется как(++A) + (!B)
A + B * C
интерпретируется какA + (B * C)
A || B && C
интерпретируется какA || (B && C)
A && B == C
интерпретируется какA && (B == C)
A & B == C
интерпретируется какA & (B == C)
(В Python , Ruby , PARI/GP и других популярных языках A & B == C
интерпретируется как (A & B) == C
.)
Компиляторы исходного кода , которые компилируют в несколько языков, должны явно решать проблему различного порядка операций в разных языках. Haxe , например, стандартизирует порядок и обеспечивает его соблюдение, вставляя скобки там, где это уместно.
Было обнаружено, что точность знаний разработчиков программного обеспечения о приоритете бинарных операторов тесно связана с частотой их появления в исходном коде. [46]
Порядок операций постепенно появлялся на протяжении столетий. Правило, согласно которому умножение имеет приоритет над сложением, было включено в развитие алгебраической нотации в 1600-х годах, поскольку распределительное свойство подразумевает это как естественную иерархию. Совсем недавно, в 1920-х годах, историк математики Флориан Каджори выявил разногласия по поводу того, должно ли умножение иметь приоритет над делением или их следует рассматривать одинаково. Термин «порядок операций» и мнемоника «PEMDAS/BEDMAS» были формализованы только в конце 19-го или начале 20-го века, поскольку возрос спрос на стандартизированные учебники. Неопределенность в таких вопросах, как имеет ли неявное умножение приоритет над явным умножением и делением в таких выражениях, как a/2b, которые можно было бы интерпретировать как a/(2b) или (a/2)*b, подразумевает, что соглашения еще не полностью стабильны. [47] [48]
sin
), но не используют его с общими именами функций (например, f
).Правило 7: Ist F ( A ) Teilzeichenreihe eines arithmetischen Ausdrucks или einer seiner Abkürzungen und F eine Funktionenkonstante und A eine Zahlenvariable или Zahlenkonstante, поэтому darf F A dafür geschrieben werden. [Darüber hinaus ist noch die Abkürzung F n ( A ) für ( F ( A )) n üblich. Dabei kann F sowohl Funktionenconstante als auch Funktionenvariable sein.]
Язык алгебры [...] может использоваться в качестве стенографии для сокращения и упрощения длинных или сложных утверждений.
Книга Кристала была каноническим источником на английском языке по алгебре средней школы на рубеже 20-го века и, вероятно, источником для многих более поздних описаний порядка операций. Однако, хотя книга Кристала изначально устанавливает жесткое правило для оценки выражений, включающих символы '÷' и '×', позже она последовательно дает неявному умножению более высокий приоритет, чем делению при написании встроенных дробей, никогда явно не обсуждая несоответствие между формальным правилом и общепринятой практикой.
Выражение вида a / bc означает то же самое, что и a /( bc ) . Более того, log x /log y = (log x )/(log y ) и 2 n ! = 2( n !) .
PEMDAS — это аббревиатура или мнемоника для порядка операций, которая расшифровывается как скобки, экспоненты, умножение, деление, сложение и вычитание. Эта аббревиатура широко используется в Соединенных Штатах Америки. Между тем, в других странах, таких как Великобритания и Канада, используются аббревиатуры BODMAS (скобки, порядок, деление, умножение, сложение и вычитание) и BIDMAS (скобки, индексы, деление, умножение, сложение и вычитание).
[...] студенты часто делают ошибки в вычислениях с выражениями, в которых есть либо умножение и деление, либо сложение и вычитание рядом друг с другом. [...]
AOS
распознает подразумеваемое умножение
, а функции квадратного корня, логарифмические и тригонометрические функции можно сопровождать их аргументами, как при работе с карандашом и бумагой.(Примечание. TI-88 существовал только в качестве прототипа и никогда не был представлен публике.)