Что сперва умножение или деление
Вы удивитесь, но большинство людей не смогут правильно это посчитать. Посчитайте сами и потом смотрите правильный ответ:
В интернете много споров про такие примеры, поэтому мы решили разобраться, какие ошибки совершают чаще всего и почему многие считают неправильно. Для решения нам понадобятся три математических правила:
- То, что в скобках, выполняется в первую очередь. Если скобок несколько, они выполняются слева направо.
- При отсутствии скобок математические действия выполняются слева направо, сначала умножение и деление, потом — сложение и вычитание.
- Между множителем и скобкой (или двумя скобками) может опускаться знак умножения.
Разберём подробнее, что это значит в нашем случае.
1. То, что в скобках, выполняется в первую очередь. То есть в нашем примере, вне зависимости от чего угодно, сначала схлопнутся скобки:
8 / 2(2 + 2) → 8 / 2(4)
2. Между числом и скобкой можно опустить знак умножения. У нас перед скобкой двойка, то есть можно сделать такую замену:
3. Математические действия при отсутствии скобок выполняются слева направо: как при чтении, сначала умножение и деление, потом — сложение и вычитание. Умножение и деление имеют одинаковый приоритет. Нет такого, что сначала всегда делается умножение, затем деление, или наоборот. Со сложением и вычитанием то же самое.
Некоторые считают, что раз множители были написаны близко друг к другу (когда там стояли скобки), то оно выполняется в первую очередь, ссылаясь при этом на разные методические пособия. На самом деле это не так, и нет такого скрытого умножения, которое имеет приоритет над другим умножением или делением. Это такое же умножение, как и остальные, и оно делается в общем порядке — как и принято во всём математическом мире.
Получается, что нам сначала надо сложить 2 + 2 в скобках, потом 8 разделить на 2, и полученный результат умножить на то, что в скобках:
8 / 2 × (2 + 2) = 8 / 2 × 4 = 4 × 4 = 16
Кстати, если на айфоне записать это выражение точно так же, как в условии, телефон тоже даст правильный ответ.
А инженерный калькулятор на Windows 10 так записывать не умеет и пропускает первую двойку-множитель. Попробуйте сами 🙂
Тут в тред врываются математики и с воплями «Шустеф!» поясняют криком:
«В АЛГЕБРЕ ТОТ ЖЕ ПОРЯДОК ДЕЙСТВИЙ, ЧТО И В АРИФМЕТИКЕ, но есть исключение: в алгебре знак умножения связывает компоненты действия сильнее, чем знак деления, поэтому знак умножения опускается. Например, a:b·c= a: (b·c)».
Этот текст из «Методики преподавания алгебры», курс лекций, Шустеф М. Ф., 1967 год. (стр. 43)
Раз в спорном примере знак умножения опущен, то спорный пример алгебраический, а значит, сначала умножаем 2 на 4, а потом 8 делим на 8!
А вот как на это отвечают те, кто действительно в теме и не ленится полностью посмотреть первоисточник:
«Для устранения недоразумений В. Л. Гончаров указывает, что предпочтительнее пользоваться в качестве знака деления чертой и ставить скобки [87]. П. С. Александров и А. Н. Колмогоров [59] предложили изменить порядок действий в арифметике и решать, например, так: 80:20×2=80:40=2 вместо обычного: 80:20×2=4×2=8. Однако это предложение не нашло поддержки».
Если апеллировать к Фриде Максовне Шустеф, то выходит, что:
- В. Л. Гончаров говорит так: «Ребята, используйте черту и ставьте скобки, чтобы ни у кого не было вопросов про приоритет».
- Если у нас всё же битва арифметики и алгебры, то, по П. С. Александрову и А. Н. Колмогорову, пример нужно решать слева направо, как обычно. Они, конечно, предложили решать такое по-другому, но научное сообщество их не поддержало.
Самое интересное, что дальше в примерах Фрида Максовна пользуется как раз правильным порядком действий, объясняя решение. Даже там, где есть умножение на скобку с опущенным знаком, она выполняет действия слева направо.
На данном уроке подробно рассмотрен порядок выполнения арифметических действий в выражениях без скобок и со скобками. Учащимся предоставляется возможность в ходе выполнения заданий определить, зависит ли значение выражений от порядка выполнения арифметических действий, узнать отличается ли порядок арифметических действий в выражениях без скобок и со скобками, потренироваться в применении изученного правила, найти и исправить ошибки, допущенные при определении порядка действий.
Сложение в обратных кодах
Случай 1. $A$ и $B$ — положительные числа.
При сложении таких чисел просто суммируются их обратные коды (для положительных чисел они равны прямым), включая знаковый разряд. Т.к. знаковый разряд у положительных чисел равен
Сложение в дополнительных кодах
Случай $1$. $A$ и $B$ — положительные.
Стандартный случай, т.к. у положительных чисел прямой, обратный и дополнительный коды совпадают.
Случай $2$. $A$ — положительное, $B$ — отрицательное, по модулю больше $A$.
В случае использования дополнительных кодов получим сразу правильный результат, в отличие от сложения обратных кодов.
Случай $3$. $A$ — положительное, $B$ — отрицательное, по модулю меньше $A$.
В отличие от сложения обратных кодов, где нужно было прибавлять «лишнюю» единицу к полученному коду, в этом случае нужно ее просто отбросить.
Случай $4$. $A$ и $B$ — отрицательные.
В этом случае тоже отбрасываем «лишнюю» единицу.
Случай $5$ и $6$. Переполнение — аналогично обратному.
При необходимости выполнения вычитания чисел, оно сводится к сложению отрицательных чисел. Например, $A-B=A+(-B).$
$, то у суммы он также равен
Умножение
Т.к. умножение — сложная операция, то специально для нее в компьютере имеется регистр (накапливающий сумматор) и с помощью последовательности сдвигов и сложений получается результат.
Умножение в двоичной системе выполняется быстрее, чем сложение и вычитание, т.к. сложение можно производить в прямом коде.
Для определения знака результата умножения над знаковыми разрядами совершается операция сложения по модулю («строгое (исключающее) ИЛИ» или «XOR»).
Умножим числа $-13$ и $23$:
Для удобства умножения нули между знаковым разрядом и первой цифрой числа за писывать не будем.
Полученный результат содержит $10$ цифр. Приведем его к виду из $16$ бит, добавив нули между знаковым разрядом и модулем числа:
$1000 0001 0010 1011.$
$, таким образом, число также будет положительным.
Случай 2. $A$ — положительное, $B$ — отрицательное, по модулю больше $A$.
В этом случае числа $A$ и $B$ (для отрицательного числа берется обратный код) просто складываются и получается результат в обратном коде:
Для перевода результата в прямой код биты цифровой части инвертируются: $1000 1010=-10$.
Случай 3. $A$ — положительное, $B$ — отрицательное, по модулю меньше $A.$
Если в этом случае поступить таким же образом, то получим ошибку расчета. Компьютер решает эту проблему переносом получившейся «лишней единицы» из знакового разряда в младший разряд получившейся суммы. Не забываем для отрицательного числа $A$ записать обратный код:
Готовые работы на аналогичную тему
Случай 4. $A$ и $B$ — отрицательные.
В этом случае во избежание ошибки снова нужно будет перенести единицу из знакового разряда в младший разряд числа.
При сложении чисел возможен вариант переполнения, когда полученный результат не помещается в выделенное для него место в памяти.
Самый надежный способ проверки не произошло ли переполнение — проверка знака результата. Если он получается не таким, какой должен быть, значит произошло переполнение.
Максимально возможное значение по модулю для чисел со знаком равно $2^$, где n — количество бит для хранения числа.
Например, если на хранение числа отводится $1$ байт, то максимально возможное значение по модулю $2^=2^7=128$. Если число по модулю получается больше, то для операции необходимо выделить больше памяти.
Заметим, что переполнение возможно в случае, когда числа имеют одинаковый знак (оба положительны или оба отрицательны).
Случай 5. Переполнение, когда $A$ и $B$ — положительные.
Мы получили в результате сложения двух положительных чисел — отрицательное. Т.е. произошло переполнение. Ситуация решается расширением диапазона:
Случай 6. Переполнение, когда $A$ и $B$ — отрицательные.
Ситуация такая же, как и в случае $5$. Решается тем же способом — расширением диапазона.
Статьи к прочтению:
Для того, чтобы вычисть числа в системе счисления с основанием q, необходимо записать одно под другим столбиком, чтобы разряды вычитаемого располагались…
Тема 3. ПРЕДОСТАВЛЕНИЕ ЧИСЕЛ В КОМПЬЮТЕРЕ Вопросы: 1. Компьютерное представление целых и вещественных чисел. 2. Арифметика двоичных чисел 2.1. Сложение в…
Арифметические операции
Арифметические операции + – сложение— – вычитание* – умножение/ – делениеDIV – деление нацелоMOD – остаток от деления
Арифметические операции Унарные операции – применяются к одной переменной.++ – увеличение на единицу (x++ выдаёт старое значение, ++x – новое значение).– – – уменьшение на единицу, аналогично операции ++.Бинарные операции – стоят между двумя переменными или
Сложение двоичных чисел
Сложение в двоичной системе счисления выполняется по тем же правилам, что и в десятичной. Два числа записываются в столбик с выравниванием по разделителю целой и дробной части и при необходимости дополняются справа незначащими нулями. Сложение начинается с крайнего правого разряда. Две единицы младшего разряда объединяются в единицу старшего.
Пример : 1011,12 + 1010,112
Интересна также ситуация, когда складываются больше двух чисел. В этом случае возможен перенос через несколько разрядов.
Пример : 111,12 + 1112 + 101,12
При сложении в разряде единиц (разряд 0) оказывается 4 единицы, которые, объединившись, дают 1002. Поэтому из нулевого разряда в первый разряд переносится 0, а во второй — 1.
Аналогичная ситуация возникает во втором разряде, где с учетом двух перенесенных единиц получается число 5 = 1012. 1 остается во втором разряде, 0 переносится в третий и 1 переносится в четвёртый.
Умножение
При умножении двух нормализованных чисел их порядки складываются, а мантиссы перемножаются.
Пример 3. Выполнить умножение двоичных нормализованных чисел:
(0.11101·2 101 )·(0.1001·2 11 ) = (0.11101·0.1001)· 2 (101+11) = 0.100000101·2 1000 .
Excel как калькулятор
Таблицу Excel можно использовать элементарно как обычный калькулятор. Если возникнет необходимость отдельно от таблицы с данными произвести какие-то промежуточные вычисления, нам теперь не нужно отвлекаться и использовать отдельное приложение калькулятора, всё делается у нас в любой пустой ячейке Microsoft Excel. Ставим знак «=». Вводим нужное арифметическое вычисление – сложение, вычитание, умножение, деление, возведение в степень. Жмём Enter и получаем результат.
Можем произвести более сложное вычисление.
Если вычисление нужно скорректировать или доработать, тогда кликаем ячейку с результатом. Делаем клик в строке формул Excel, изменяем или довычисляем что нужно. Жмём Enter.
Простейшие операции над 32-битными числами
Сразу возникает вопрос: если регистры у нас 16-битные, то как с их помощью обрабатывать 32-битные числа? Ответ очевиден: мы просто будем задавать каждое число не одним регистром, а сразу двумя.
Только нам надо сначала определиться, какими регистрами и как мы будем для этого пользоваться. Давай не станем изобретать велосипед, а поищем подсказки в самом процессоре 8088.
У 8088 есть инструкция mul , которая умножает AX на 16-битный регистр и кладет результат в DX:AX . Также у него есть инструкция div , которая делит DX:AX на 16-битный регистр; результат попадает в регистр AX , а остаток — в DX . Еще у 8088 есть инструкция cwd . Она конвертирует знаковое 16-битное число из регистра AX в 32-битное число DX:AX .
Давай и мы, по примеру этих трех инструкций, тоже будем хранить 32-битные числа в DX:AX (в DX старшее слово, в AX — младшее). Но чтобы выполнять арифметические операции, нам нужно еще одно 32-битное число. Его, по аналогии с первым, будем хранить в CX:BX (в CX старшее слово, в BX — младшее).
Ну вот, мы с тобой условились, где и как хранить 32-битные числа. Теперь давай реализуем для них операцию сложения и операцию вычитания. Для этого нам пригодятся инструкции adc и sbb . Вот так выглядит сложение.
Удивлен, что операция сложения у нас заняла всего две инструкции? Сейчас объясню, что тут происходит. Дело в том, что, когда ты выполняешь инструкцию add , она не только складывает два числа, но и изменяет флаг переноса. Когда результат операции сложения не умещается в сдвоенный байт, инструкция add помещает старшую цифру результата (это всегда единица) во флаг переноса.
Инструкция adc dx, cx выполняет вот такую операцию: DX = DX + CX + перенос , то есть прибавляет к итоговому результату то значение, которое хранится во флаге переноса.
Теперь давай реализуем вычитание 32-битных чисел по такому же принципу.
Что тут происходит? Инструкция sub вычитает из одного числа другое, а еще изменяет флаг переноса. Когда операция вычитания делает «заем» из соседнего разряда, флаг переноса устанавливается в единицу.
Инструкция sbb dx, cx выполняет вот такую операцию: DX = DX – CX – перенос , то есть вычитает из итогового результата то значение, которое хранится во флаге переноса.
Мы с тобой успешно реализовали операции сложения и вычитания. Теперь давай реализуем логическое инвертирование и арифметическое инвертирование.
Чтобы сделать логическое инвертирование 32-битного числа ( not ), нам надо просто переключить все биты числа на противоположные.
Если требуется выполнить арифметическое инвертирование ( neg ), то есть поменять знак числа, нужно сделать то же самое, но только прибавить единицу к результату.
«Совсем вишня»
В Сети гуляет пример, вызывающий затруднения у взрослых дяденек и тетенек. Он не совсем по рассматриваемой теме, что сначала — умножение или сложение. Он вроде как про то, что сначала выполняете действие в скобках.
От перестановки слагаемых сумма не изменяется, от перестановки множителей тоже. Нужно просто записывать выражение так, чтобы не было потом мучительно стыдно.