Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В математике и компьютерном программировании , то порядок операций (или приоритета операторов ) представляет собой набор правил, отражающих конвенции о том, какие процедуры для выполнения первого для того , чтобы оценить данное математическое выражение .

Например, в математике и большинстве компьютерных языков умножение имеет более высокий приоритет, чем сложение, и так было с момента появления современных алгебраических обозначений . [1] [2] Таким образом, выражение 2 + 3 × 4 интерпретируется как имеющее значение 2 + (3 × 4) = 14 , а не (2 + 3) × 4 = 20 . С введением экспонентов в XVI и XVII веках им был дан приоритет как над сложением, так и над умножением, и их можно было размещать только как верхний индекс справа от их основания. [1] Таким образом, 3 + 5 2 = 28 и 3 × 5 2 = 75 .

Эти соглашения существуют для устранения двусмысленности обозначений, позволяя при этом быть как можно более краткими. Там, где желательно переопределить соглашения о приоритете или даже просто подчеркнуть их, можно использовать круглые скобки (), чтобы указать альтернативный порядок операций (или просто усилить порядок операций по умолчанию). Например, (2 + 3) × 4 = 20 заставляет сложение предшествовать умножению, а (3 + 5) 2 = 64 заставляет сложение предшествовать возведению в степень . Если в математическом выражении требуется несколько пар круглых скобок (например, в случае вложенных круглых скобок), круглые скобки можно заменить скобками или фигурными скобками.чтобы избежать путаницы, как в [2 × (3 + 4)] - 5 = 9 . [3]

Определение [ править ]

Порядок операций, который используется в математике, науке, технике и во многих языках программирования , выражен здесь: [1] [4] [5]

  1. возведение в степень и извлечение корня
  2. умножение и деление
  3. сложение и вычитание

Это означает, что если в математическом выражении между двумя операторами появляется подвыражение, первым должен применяться оператор, который находится выше в приведенном выше списке.

В коммутативных и ассоциативные законы сложения и умножения позволяют добавлять условия в любом порядке, и умножением коэффициентов в любых операциях порядка, но смешанных должны соблюдать стандартный порядок операций.

В некоторых случаях полезно заменить деление умножением на обратное (мультипликативное обратное) и вычитание сложением противоположного (аддитивное обратное). Например, в компьютерной алгебре это позволяет обрабатывать меньшее количество бинарных операций и упрощает использование коммутативности и ассоциативности при упрощении больших выражений (подробнее см. Компьютерная алгебра § Упрощение ). Таким образом, 3 ÷ 4 = 3 ×1/4; другими словами, частное 3 и 4 равно произведению 3 и1/4. Также 3–4 = 3 + (−4) ; другими словами, разница 3 и 4 равна сумме 3 и −4. Таким образом, 1 - 3 + 7 можно представить как сумму 1 + (−3) + 7 , и три слагаемых можно складывать в любом порядке, во всех случаях в результате получается 5.

Корневой символ √ традиционно продолжается чертой (называемой винкулумом ) над подкоренным выражением (это позволяет избежать использования скобок вокруг подкоренного выражения). Другие функции используют круглые скобки вокруг ввода, чтобы избежать двусмысленности. [6] [7] [a] Скобки можно опустить, если входные данные представляют собой единственную числовую переменную или константу [1] (как в случае sin x = sin ( x ) и sin π = sin (π) . [ a] Другое сокращенное соглашение, которое иногда используется, когда ввод является мономиальным ; таким образом, sin 3 x = sin (3 x ), а не(sin (3))  x , но sin x + y = sin ( x ) + y , потому что x + y не является мономом. Это, однако, неоднозначно и не всегда понимается вне конкретных контекстов. [b] Некоторые калькуляторы и языки программирования требуют скобок для ввода функций, некоторые - нет.

Символы группировки могут использоваться для отмены обычного порядка операций. [1] Сгруппированные символы можно рассматривать как одно выражение. [1] Символы группировки могут быть удалены с использованием ассоциативных и распределительных законов, также они могут быть удалены, если выражение внутри символа группирования достаточно упрощено, поэтому их удаление не вызывает двусмысленности.

Примеры [ править ]

Горизонтальная дробная черта также служит символом группировки:

Для удобства чтения вместе со скобками () часто используются другие символы группировки, такие как фигурные скобки { } или квадратные скобки [] . Например:

Мнемоника [ править ]

Мнемоника часто используется, чтобы помочь учащимся запомнить правила, включая первые буквы слов, обозначающих различные операции. В разных странах используются разные мнемоники. [8] [9] [10]

  • В Соединенных Штатах широко распространена аббревиатура PEMDAS . [11] Это расшифровывается как P arentheses, E xponents, M ultiplication / D ivision, A ddition / S ubtraction. [11] PEMDAS часто расширяется до мнемоники « Прошу прощения, моя дорогая тетя Салли ». [12]
  • Канада и Новая Зеландия использование BEDMAS , стоя на B ракеток, E xponents, D IVISION / M ultiplication, ddition / S ubtraction. [11]
  • Наиболее распространены в Великобритании, Пакистана, Индии, Бангладеш и Австралии [13] и некоторых других странах английского языка является BODMAS означает либо B ракеток, O rder, D IVISION / M ultiplication, ddition / S ubtraction или B ракеток, O е / D IVISION / М ultiplication, ddition / S ubtraction. [c] [14] Нигерия и некоторые другие страны Западной Африки также используют BODMAS. Точно так же в Великобритании также используется BIDMAS , обозначающий BРакетки, я ndices, D IVISION / М ultiplication, ddition / S ubtraction.

Эта мнемоника может вводить в заблуждение, когда написана таким образом. [12] Например, неправильная интерпретация любого из приведенных выше правил как «сначала сложение, затем вычитание» приведет к неправильной оценке выражения [12]

При оценке приведенного выше выражения сложение и вычитание следует выполнять последовательно слева направо, поскольку вычитание является левоассоциативным и считается неассоциативной операцией . Либо работая слева направо, либо рассматривая вычитание как добавление числа со знаком, будет получен правильный ответ; выполнение вычитания в неправильном порядке приведет к неправильному ответу. Мнемоники не отражают группировку сложения / вычитания или умножения / деления, поэтому их использование может привести к недопониманию.

Подобная двусмысленность существует и в случае последовательного деления, например, выражение a ÷ b ÷ c × d может быть прочитано несколькими способами, но они не всегда могут давать один и тот же ответ. [ необходима цитата ]

Деление иногда считается левоассоциативным . То есть, если в строке несколько делений, порядок вычислений может идти слева направо. Однако это не является общепринятым: [15] [16]

Кроме того, математическая привычка комбинировать множители и представлять деление как умножение на обратную величину значительно снижает частоту неоднозначного деления.

Особые случаи [ править ]

Серийное возведение в степень [ править ]

Если возведение в степень обозначается составными символами с использованием надстрочного обозначения, обычное правило - работать сверху вниз: [17] [1] [7] [18]

а б в = а ( б в )

который обычно не равен ( a b ) c .

Однако при использовании обозначений операторов с помощью каретки (^) или стрелки (↑) общего стандарта не существует. [19] Например, Microsoft Excel и язык программирования вычислений MATLAB оцениваются как ( a b ) c , а Google Search и Wolfram Alpha как a ( b c ) . Таким образом оценивается в 4096 в первом случае и в 262 144 во втором случае.a^b^c4^3^2

Унарный знак минус [ править ]

Существуют разные соглашения относительно унарного оператора - (обычно читается как «минус»). В письменной или печатной математике выражение −3 2 интерпретируется как значение 0 - (3 2 ) = - 9 . [1] [20]

В некоторых приложениях и языках программирования, особенно в Microsoft Excel , PlanMaker (и других приложениях для работы с электронными таблицами) и языке программирования bc , унарные операторы имеют более высокий приоритет, чем двоичные операторы, то есть унарный минус имеет более высокий приоритет, чем возведение в степень, поэтому на этих языках −3 2 будет интерпретироваться как (−3) 2 = 9 . [21] Это не относится к бинарному оператору минус -; например , в Microsoft Excel , а формулы =−2^2, =-(2)^2и =0+−2^2возвращение 4, формула =0−2^2и =−(2^2)возвратные -4.

Смешанное деление и умножение [ править ]

Точно так же может быть двусмысленность в использовании символа косой черты / в таких выражениях, как 1/2 x . [12] Если переписать это выражение как 1 ÷ 2 x, а затем интерпретировать символ деления как указание на умножение на обратную величину, это станет:

1 ÷ 2 × х = 1 ×1/2× х =1/2× х .

В этой интерпретации 1 ÷ 2 x равно (1 ÷ 2) x . [1] [8] Однако в некоторой академической литературе умножение, обозначаемое сопоставлением (также известное как подразумеваемое умножение ), интерпретируется как имеющее более высокий приоритет, чем деление, так что 1 ÷ 2 x равно 1 ÷ (2 x ) , а не (1 ÷ 2) х . Например, в инструкциях по отправке рукописей для журналов Physical Review указано, что умножение имеет более высокий приоритет, чем деление с косой чертой [22].и это также конвенции наблюдается в известных учебниках физики , таких как курс теоретической физики по Ландау и Лифшица и Фейнмановские лекции по физике . [d]

Калькуляторы [ править ]

Разные калькуляторы выполняют разный порядок операций. [1] Многие простые калькуляторы без стека реализуют цепной ввод, работающий слева направо, без какого-либо приоритета для разных операторов, например при вводе

1 + 2 × 3 дает 9,

в то время как более сложные калькуляторы будут использовать более стандартный приоритет, например, ввод

1 + 2 × 3 дает 7.

Программа Microsoft Calculator использует первое в стандартном представлении, а второе - в научных и программистских представлениях.

Цепной ввод предполагает два операнда и оператор. Когда нажимается следующий оператор, выражение немедленно вычисляется, и ответ становится левой рукой следующего оператора. Расширенные калькуляторы позволяют вводить все выражение, сгруппированное по мере необходимости, и вычислять только тогда, когда пользователь использует знак равенства.

Калькуляторы могут связывать экспоненты слева направо. Так , например, выражение интерпретируется как в ( б с ) на TI-92 и TI-30XS MultiView в «режиме Mathprint», в то время как он интерпретируется как ( б ) с на TI-30XII и TI-30XS MultiView в «Классическом режиме».a^b^c

Выражение , как интерпретируется как 1 / (2 х ) с помощью TI-82 , а также многих современных Casio вычислителей, [23] , но , как (1/2) х по ТИ-83 и любой другой TI калькулятор выпущен с 1996 года, [ 24], а также всеми калькуляторами Hewlett-Packard с алгебраической записью. В то время как первая интерпретация может ожидаться некоторыми пользователями из-за природы подразумеваемого умножения , последняя больше соответствует стандартному правилу, согласно которому умножение и деление имеют равный приоритет, [25] [26] где 1/2 x1/2xчитается, что единица делится на два, а ответ умножается на x .

Когда пользователь не уверен, как калькулятор интерпретирует выражение, рекомендуется использовать круглые скобки, чтобы исключить двусмысленность.

Калькуляторы, использующие обратную польскую нотацию (RPN), также известную как постфиксная нотация, используют стек для ввода выражений в правильном порядке приоритета без скобок или любого, возможно, зависящего от модели порядка выполнения. [12] [11]

Языки программирования [ править ]

Некоторые языки программирования используют уровни приоритета, которые соответствуют порядку, обычно используемому в математике [19], хотя другие, такие как APL , Smalltalk , Occam и Mary , не имеют правил приоритета операторов (в APL оценка выполняется строго справа налево; в Smalltalk) и т.д. строго слева направо).

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

Автор на языке Си сказал о приоритете в C (разделяемой языки программирования , которые одолжить эти правила из С, например, C ++ , Perl и PHP ) , что было бы предпочтительнее , чтобы переместить операторы побитового выше операторов сравнения . [27] Однако многие программисты привыкли к такому порядку. Уровни относительного приоритета операторов во многих языках C-стиля следующие:

Примеры: (Примечание: в приведенных ниже примерах "≡" используется для обозначения "эквивалентно", а не для интерпретации как фактический оператор присваивания, используемый как часть примера выражения.)

  • !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)

Компиляторы «исходный код», которые компилируются для нескольких языков, должны явно решать проблему разного порядка операций на разных языках. Например, Haxe стандартизирует порядок и обеспечивает его соблюдение, вставляя скобки там, где это необходимо. [28]

Было обнаружено, что точность знаний разработчика программного обеспечения о приоритете бинарных операторов тесно связана с частотой их появления в исходном коде. [29]

См. Также [ править ]

  • Обозначения общих операторов (для более формального описания)
  • Гипероперация
  • Ассоциативность операторов
  • Перегрузка оператора
  • Приоритет операторов в C и C ++
  • Польская нотация
  • Обратная польская запись

Примечания [ править ]

  1. ^ a b Некоторые авторы намеренно избегают пропусков скобок в функциях даже в случае единственной числовой переменной или постоянных аргументов (например, Олдхэм в Атласе ), тогда как другие авторы (например, NIST ) применяют это упрощение обозначений только условно в сочетании с конкретными многозначными аргументами. имена символьных функций (например, sin), но не используйте их с универсальными именами функций (например f).
  2. ^ Чтобы избежать какой-либо двусмысленности, этого упрощения обозначений для мономов намеренно избегают в таких работах, как Атлас функций Олдхэма или Справочник математических функций NIST .
  3. ^ «Из» эквивалентно деления или умножения, и широко используетсяособенно на уровне начальной школы, как в «Половина из пятидесяти».
  4. ^ Например, третье издание « Механики » Ландау и Лифшица содержит такие выражения, как hP z / 2 π (стр. 22), а первый том « Лекций Фейнмана» содержит такие выражения, как 1/2N (стр. 6– 7) . В обеих книгах эти выражения написаны с условием, что солидус вычисляется последним. Это также означает, что выражение типа 8/2 (4) имеет решение 1, поскольку отсутствие знака умножения (x * или.) Означает, что солидус вычисляется последним, даже если он расположен левее.

Ссылки [ править ]

  1. ^ a b c d e f g h i j Бронштейн, Илья Николаевич ; Семендяев, Константин Адольфович (1987) [1945]. «2.4.1.1. Определение arithmetischer Ausdrücke» [Определение арифметических выражений]. Написано в Лейпциге, Германия. В Гроше, Гюнтер; Зиглер, Виктор; Зиглер, Доротея (ред.). Taschenbuch der Mathematik [ Карманный справочник по математике ] (на немецком языке). 1 . Перевод Виктор Зиглер. Вайс, Юрген (23-е изд.). Тун, Швейцария / Франкфурт-на-Майне, Германия: Verlag Harri Deutsch (и BG Teubner Verlagsgesellschaft , Лейпциг). С. 115–120, 802.ISBN 3-87144-492-8. Регель 7: Ist F ( A ) Teilzeichenreihe eines arithmetischen Ausdrucks oder einer seiner Abkürzungen und F eine Funktionenkonstante und A eine Zahlenvariable oder Zahlenkonstante, so 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 Funktionenkonstante als auch Funktionenvariable sein.]
  2. ^ "Спросите доктора Математики" . Математический форум. 2000-11-22 . Проверено 5 марта 2012 .
  3. ^ "Сборник математических символов" . Математическое хранилище . 2020-03-01 . Проверено 22 августа 2020 .
  4. ^ Вайсштейн, Эрик В. «Приоритет» . mathworld.wolfram.com . Проверено 22 августа 2020 .
  5. ^ Стапель, Элизабет. «Порядок действий: ПЕМДАС» . Purplemath . Проверено 22 августа 2020 .
  6. ^ Олдхэм, Кейт Б.; Myland, Jan C .; Спаниер, Джером (2009) [1987]. Атлас функций: с Equator, калькулятор функций Атласа (2-е изд.). Springer Science + Business Media, LLC . DOI : 10.1007 / 978-0-387-48807-3 . ISBN 978-0-387-48806-6. LCCN  2008937525 .
  7. ^ а б Олвер, Франк WJ; Lozier, Daniel W .; Бойсверт, Рональд Ф .; Кларк, Чарльз В., ред. (2010). Справочник NIST по математическим функциям . Национальный институт стандартов и технологий (NIST), Министерство торговли США , Cambridge University Press . ISBN 978-0-521-19225-5. Руководство по ремонту  2723248 .[1]
  8. ^ a b "Правила арифметики" (PDF) . Mathcentre.ac.uk . Проверено 2 августа 2019 .
  9. ^ «Прошу прощения, моя дорогая тетя Салли (PEMDAS) - навсегда!» . Education Week - Тренер Джи Обучение Советы . 2011-01-01.
  10. ^ «Что такое PEMDAS? - Определение, правила и примеры» . Study.com .
  11. ^ a b c d Вандербик, Грег (июнь 2007 г.). Порядок работы и РПН (Пояснительная статья). Экзаменационные работы на степень магистра педагогических наук (MAT). Линкольн, Небраска, США: Университет Небраски . Документ 46. Архивировано 14 июня 2020 года . Проверено 14 июня 2020 .
  12. ^ а б в г д Болл, Джон А. (1978). Алгоритмы для вычислителей РПН (1-е изд.). Кембридж, Массачусетс, США: Wiley-Interscience , John Wiley & Sons, Inc., стр. 31 . ISBN 0-471-03070-8.
  13. ^ «Порядок действий» (DOC) . Syllabus.bos.nsw.edu.au . Проверено 2 августа 2019 .
  14. ^ «Правило Бодмаса - Что такое Правило Бодмаса - Порядок действий» . vedantu.com . Проверено 21 августа 2019 .
  15. Джордж Марк Бергман: Порядок арифметических операций. Архивировано 5 марта 2017 г. в Wayback Machine.
  16. ^ Образование Место: Порядок операций архивации 2017-06-08 в Wayback Machine
  17. ^ Робинсон, Рафаэль Митчел (октябрь 1958) [1958-04-07]. «Отчет о простых числах вида k · 2 n + 1 и множителях чисел Ферма» (PDF) . Труды Американского математического общества . Калифорнийский университет , Беркли, Калифорния, США. 9 (5): 673–681 [677]. DOI : 10,1090 / s0002-9939-1958-0096614-7 . Архивировано (PDF) из оригинала 28.06.2020 . Проверено 28 июня 2020 .
  18. ^ Зейдлер, Эберхард ; Шварц, Ганс Рудольф; Хакбуш, Вольфганг ; Людерер, Бернд ; Блат, Йохен; Schied, Александр; Демпе, Стефан; Ванка, Герт ; Громкович, Юрай ; Готвальд, Зигфрид (2013) [2012]. Зейдлер, Эберхард (ред.). Springer-Handbuch der Mathematik I (на немецком языке). Я (1-е изд.). Берлин / Гейдельберг, Германия: Springer Spektrum , Springer Fachmedien Wiesbaden . п. 590. DOI : 10.1007 / 978-3-658-00285-5 . ISBN 978-3-658-00284-8. (xii + 635 стр.)
  19. ^ а б Ван Винкль, Льюис (2016-08-23). "Ассоциативность возведения в степень и стандартная математическая запись" . Codeplea - Случайные мысли о программировании . Архивировано 28 июня 2020 года . Проверено 20 сентября 2016 .
  20. ^ Ангел, Аллен Р. Элементарная алгебра для студентов колледжа (8 - е изд.). Глава 1, Раздел 9, Задача 3.
  21. ^ «Формула возвращает неожиданное положительное значение» . Microsoft . 2005-08-15. Архивировано из оригинала на 2015-04-19 . Проверено 5 марта 2012 .
  22. ^ "Руководство по стилю и обозначениям физического обзора" (PDF) . Американское физическое общество . Раздел IV – E – 2 – e . Проверено 5 августа 2012 .
  23. ^ «Последовательность приоритетов вычислений» . support.casio.com . Casio . Проверено 1 августа 2019 .
  24. ^ «Подразумеваемое умножение против явного умножения на графических калькуляторах TI» . Техасские инструменты . 2011-01-16. 11773. Архивировано от оригинала на 2016-04-17 . Проверено 24 августа 2015 .
  25. Перейти ↑ Zachary, Joseph L. (1997). «Введение в научное программирование - Решение вычислительных задач с использованием Maple и C - Таблица приоритетов операторов» . Проверено 25 августа 2015 .
  26. Перейти ↑ Zachary, Joseph L. (1997). «Введение в научное программирование - Решение вычислительных задач с использованием Mathematica и C - Записная книжка приоритета операторов» . Проверено 25 августа 2015 .
  27. ^ Ричи, Деннис М. (1996). «Развитие языка Си». История языков программирования (2-е изд.). ACM Press .
  28. ^ Ли, Энди (2011-05-02). "6 ÷ 2 (1 + 2) =?" . Блог Энди Ли . Проверено 31 декабря 2012 .
  29. ^ Джонс, Дерек М. «Убеждения разработчиков о приоритете бинарных операторов» . CVu . 18 (4): 14–21.

Дальнейшее чтение [ править ]

  • Бергман, Джордж Марк (21 февраля 2013 г.). «Порядок арифметических операций; в частности, вопрос 48/2 (9 + 3)» . Департамент математики Калифорнийского университета. Архивировано 20 мая 2020 года . Проверено 22 июля 2020 .
  • «Порядок действий» . MathSteps: что это такое? . Компания Houghton Mifflin . 1999. Архивировано 21 июля 2020 года . Проверено 22 июля 2020 .