Порядок действий - Order of operations

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

Например, в математике и большинстве компьютерных языков умножение имеет более высокий приоритет, чем сложение, и так было с момента появления современных алгебраическая запись.[1][2] Таким образом, выражение 2 + 3 × 4 интерпретируется как имеющее значение 2 + (3 × 4) = 14, и нет (2 + 3) × 4 = 20. С введением в XVI и XVII веках экспонент им был дан приоритет как над сложением, так и над умножением, и их можно было размещать только как верхний индекс справа от их основания.[1] Таким образом 3 + 52 = 28 и 3 × 52 = 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][а] Скобки можно опустить, если введены единственная числовая переменная или константа.[1] (как и в случае с грех Икс = грех (Икс) и грех π = грех (π).[а] Другое сокращенное соглашение, которое иногда используется, когда ввод одночлен; таким образом, грех 3Икс = грех (3Икс) скорее, чем (грех (3))Икс, но грех Икс + у = грех (Икс) + у, потому что Икс + у не является мономом. Это, однако, неоднозначно и не всегда понимается вне конкретных контекстов.[b]Некоторые калькуляторы и языки программирования требуют заключения функций в скобки, некоторые - нет.

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

Примеры

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

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

Мнемоника

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

  • В США аббревиатура ПЕМДАС обычное дело.[11] Это означает парентезы, Eкомпоненты, Multiplication /Division Аddition /Sубтракция.[11] PEMDAS часто расширяется до мнемоники "Прошу прощения, моя дорогая тетя Салли".[12]
  • Канада и Новая Зеландия используют БЕДМЫ, стоя для Bракетки Eкомпоненты, Division /Mультипликация Аddition /Sубтракция.[11]
  • Наиболее распространены в Великобритании, Пакистане, Индии, Бангладеш и Австралии.[13] и некоторые другие англоязычные страны БОДМЫ означает либо Bракетки Оrder, Division /Mультипликация Аddition /Sубирание или Bракетки Оf /Division /Mультипликация Аddition /Sубтракция.[c][14] Нигерия и некоторые другие страны Западной Африки также используют BODMAS. Аналогичным образом в Великобритании BIDMAS также используется, обозначая Bракетки яиндексы, Division /Mультипликация Аddition /Sубтракция.

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

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

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

Дивизия традиционно считается левоассоциативный. То есть, если в строке несколько делений, порядок вычислений идет слева направо:[15][16]

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

Особые случаи

Последовательное возведение в степень

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

абc = а(бc)

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

Однако при использовании обозначения оператора с каретка (^) или стрелка (↑), общего стандарта нет.[19] Например, Майкрософт Эксель и язык программирования вычислений MATLAB оценивать а^б^c в качестве (аб)c, но Поиск Гугл и вольфрам Альфа так как а(бc). Таким образом 4^3^2 оценивается в 4096 в первом случае и в 262 144 во втором.

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

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

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

Смешанное деление и умножение

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

1 ÷ 2 × Икс = 1 × 1/2 × Икс = 1/2 × Икс.

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

Калькуляторы

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

1 + 2 × 3 дает 9,

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

1 + 2 × 3 дает 7.

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

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

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

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

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

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

Языки программирования

Немного языки программирования использовать уровни приоритета, соответствующие порядку, обычно используемому в математике,[19] хотя другие, такие как APL, Болтовня, Оккам и Мэри, нет оператор правила приоритета (в 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 (разделяемом языками программирования, которые заимствуют эти правила из C, например, C ++, Perl и PHP ), что было бы предпочтительнее переместить побитовые операторы выше операторы сравнения.[27] Однако многие программисты привыкли к такому порядку. Относительные уровни приоритета операторы найденные во многих языках C-стиля, следующие:

1()   []   ->   .   ::Вызов функции, область видимости, доступ к массиву / члену
2!   ~   -   +   *   &   размер   приведение типа   ++   --  (большинство) унарных операторов, размер и приведение типов (справа налево)
3* /% MODУмножение, деление, по модулю
4+   -Сложение и вычитание
5<<   >>Побитовый сдвиг влево и вправо
6<   <=   >   >=Сравнения: меньше и больше
7==   !=Сравнения: равны и не равны
8&Побитовое И
9^Побитовое исключающее ИЛИ (XOR)
10|Поразрядное инклюзивное (нормальное) ИЛИ
11&&Логическое И
12||Логическое ИЛИ
13? :Условное выражение (тернарное)
14=   +=   -=   *=   /=   %=   &=   |=   ^=   <<=   >>=Операторы присваивания (справа налево)
15,Оператор запятой

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

  • ! A +! B(! А) + (! В)
  • ++ А +! В(++ А) + (! В)
  • А + В * СА + (В * С)
  • А || ДО Н.ЭА || (ДО Н.Э)
  • A && B == CA && (B == C)
  • А и В == СА & (В == С)

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

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

Смотрите также

Примечания

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

Рекомендации

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

дальнейшее чтение

внешняя ссылка